systemd چیه و چطور سرویس بسازیم؟

systemd چیه و چطور سرویس بسازیم؟

systemd مدیر سیستم و سرویس ها توی لینوکسه اولین پروسه ای هست که موقع بوت شدن سرور اجرا میشه و مسئول راه اندازی همه سرویس ها و مدیریتشونه


systemd چیکار میکنه؟

  • راه اندازی سرویس ها

وقتی سرور بوت میشه systemd تک تک سرویس ها رو به ترتیب راه میندازه میدونه Nginx باید بعد از Network راه بیفته PHP بعد از Nginx و الی آخر

  • مدیریت وضعیت سرویس ها

یه سرویس رو میتونی استارت کنی استاپ کنی ریستارت کنی یا وضعیتش رو ببینی

  • راه اندازی مجدد خودکار

اگه سرویسی بخوابه یا کرش کنه systemd می‌تونه خودکار دوباره راهش بندازه

  • لاگ گیری

تمام لاگ‌های سرویس ها رو جمع میکنه و با دستور journalctl می‌تونی ببینیشون

  • زمان بندی و وابستگی

میتونی تعریف کنی یه سرویس بعد از یه سرویس دیگه راه بیفته یا قبل از فلان سرویس استاپ بشه


Unit چیه؟

توی systemd هر چیزی یه Unit هست سرویس ها سوکت ها تایمرها دستگاه ها و... همه Unit هستن هر Unit یه فایل متنی سادست که توش مشخص شده چطور باید اجرا بشه

انواع Unit:

service. : یه سرویس یا برنامه

socket. : یه سوکت برای ارتباط

timer. : یه تایمر مثل cron

target. : یه گروه از Unit ها

mount. : یه نقطه اتصال فایل سیستم


یه سرویس ساده بسازیم

فرض کن یه اسکریپت پایتون داری که میخوای همیشه توی بکگراند اجرا بشه فایل رو بذار توی /opt/myapp/app.py

مرحله ۱: ساخت فایل سرویس

توی مسیر /etc/systemd/system/ یه فایل با اسم myapp.service بساز:

[Unit]
Description=app name
After=network.target

[Service]
Type=simple
User=myuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

مرحله ۲: reload کردن systemd

sudo systemctl daemon-reload

مرحله ۳: استارت و فعال سازی سرویس


sudo systemctl start myapp
sudo systemctl enable myapp

الان سرویس اجرا میشه و بعد از هر ریبوت خودکار راه میافته


توضیح بخش‌های فایل سرویس

[Unit]

Description: توضیح کوتاه درباره سرویس

After: بگو این سرویس بعد از چی راه بیفته (مثلا network.target یعنی بعد از شبکه)

[Service]

Type: نوع سرویس simple یعنی یه برنامه ساده که توی foreground اجرا میشه

User: با کدوم کاربر اجرا بشه (root نباشه بهتره)

WorkingDirectory: مسیر کاری سرویس

ExecStart: دستوری که سرویس رو اجرا میکنه

Restart: کی ریستارت بشه (always یعنی همیشه on-failure یعنی فقط وقتی کرش کنه)

RestartSec: چند ثانیه صبر کنه بعد ریستارت

[Install]

WantedBy: توی کدوم Target فعال بشه (multi-user.target یعنی حالت عادی بدون GUI)


دستورات پرکاربرد systemctl

استارت سرویس

sudo systemctl start myapp

استاپ سرویس

sudo systemctl stop myapp

ریستارت سرویس

sudo systemctl restart myapp

وضعیت سرویس

sudo systemctl status myapp

فعال‌سازی برای اجرا در بوت

sudo systemctl enable myapp

غیرفعال‌سازی از بوت

sudo systemctl disable myapp

دیدن لاگ‌های سرویس

sudo journalctl -u myapp

دیدن لاگ‌های زنده (لحظه ای)

sudo journalctl -u myapp -f

لیست همه سرویس ها

sudo systemctl list-units --type=service

لیست سرویس های فعال

sudo systemctl list-units --type=service --state=running

reload بعد از تغییر فایل ها

sudo systemctl daemon-reload
 amir

amir

برنامه نویس python, php طراح سایت