مدیریت سرویس‌های systemd با systemctl در لینوکس پرینت


## 🔧 مدیریت سرویس‌های systemd با `systemctl` در لینوکس

از نسخه‌های جدید لینوکس (مانند CentOS 7+/RHEL 7+/Ubuntu 16.04+) به بعد، **systemd** به‌عنوان سیستم init و مدیریت سرویس‌ها استفاده می‌شود. ابزار اصلی برای کار با آن، دستور **`systemctl`** است.

---

### 📋 فهرست مطالب

1. بررسی وضعیت سرویس
2. راه‌اندازی و توقف سرویس
3. فعال/غیرفعال کردن اجرای خودکار
4. بارگذاری مجدد پیکربندی
5. ریستارت سرویس
6. مشاهده لاگ‌ سرویس
7. Mask و Unmask کردن سرویس
8. لیست و جستجوی واحدها (units)
9. ایجاد و ویرایش واحدهای ساده

---

## 1. بررسی وضعیت سرویس

```bash
sudo systemctl status <service>
```

* نمایش وضعیت فعلی (فعال، غیرفعال، در حال اجرا/متوقف)
* آخرین پیام‌های journal مربوط به سرویس را نشان می‌دهد.

مثال:

```bash
sudo systemctl status nginx
```

---

## 2. راه‌اندازی و توقف سرویس

* **اجرای فوری سرویس**

```bash
sudo systemctl start <service>
```
* **توقف فوری سرویس**

```bash
sudo systemctl stop <service>
```
* **لغو حالت معلق (enable) و توقف**
اگر سرویسی در وضعیت «در حال بارگیری» گیر کند، می‌توانید از stop استفاده کنید.

---

## 3. فعال/غیرفعال کردن اجرای خودکار در بوت

* **فعال‌سازی (Enable)**
سرویس در زمان بوت اجرا خواهد شد.

```bash
sudo systemctl enable <service>
```
* **غیرفعال‌سازی (Disable)**
اجرا در بوت غیر فعال می‌شود.

```bash
sudo systemctl disable <service>
```

---

## 4. بارگذاری مجدد پیکربندی (Reload)

اگر فایل پیکربندی سرویس را بدون ریستارت می‌خواهید دوباره بارگذاری کنید (در صورتی سرویس از SIGHUP پشتیبانی کند):

```bash
sudo systemctl reload <service>
```

---

## 5. ریستارت سرویس

برای توقف و اجرای مجدد همزمان:

```bash
sudo systemctl restart <service>
```

---

## 6. مشاهده لاگ‌های سرویس

با استفاده از journalctl:

```bash
sudo journalctl -u <service> -f
```

* `-u` مشخص‌کننده‌ی واحد (unit)
* `-f` دنبال کردن لاگ زنده

مثال:

```bash
sudo journalctl -u nginx -f
```

---

## 7. Mask و Unmask کردن سرویس

* **Mask**
سرویس را به `/dev/null` لینک می‌کند تا حتی با `start` نیز اجرا نشود.

```bash
sudo systemctl mask <service>
```
* **Unmask**
برگرداندن به حالت عادی.

```bash
sudo systemctl unmask <service>
```

---

## 8. لیست و جستجوی واحدها (Units)

* **لیست تمام واحدهای سرویس (service units):**

```bash
systemctl list-unit-files --type=service
```
* **لیست واحدهای در حال اجرا:**

```bash
systemctl list-units --type=service --state=running
```
* **جستجوی یک واحد با pattern:**

```bash
systemctl list-units | grep ssh
```

---

## 9. ایجاد و ویرایش واحدهای ساده

### ساخت یک واحد سرویس جدید

1. ایجاد فایل در `/etc/systemd/system/`:

```bash
sudo nano /etc/systemd/system/myapp.service
```
2. محتوای نمونه:

```ini
[Unit]
Description=My Custom App Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/myapp --serve
Restart=on-failure
User=appuser
WorkingDirectory=/home/appuser

[Install]
WantedBy=multi-user.target
```
3. بارگذاری مجدد systemd:

```bash
sudo systemctl daemon-reload
```
4. فعال و اجرای سرویس:

```bash
sudo systemctl enable myapp
sudo systemctl start myapp
```

---

## ✅ نکات کلیدی

* همیشه پس از ویرایش واحدها، از `daemon-reload` استفاده کنید.
* برای عیب‌یابی، لاگ‌های `journalctl` را به دقت بررسی کنید.
* تنظیم `Restart=` می‌تواند سرویس را در صورت خرابی مجدداً راه‌اندازی کند.
* از `WantedBy=` برای تعیین runlevel یا targets استفاده می‌شود.

 


آیا این پاسخ به شما کمک کرد؟

  • 0
« برگشت