## 🔧 مدیریت سرویسهای 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 استفاده میشود.