ساخت سرویس اختصاصی برای برنامه خودتان
فرض کنید یک برنامه پایتون یا Node.js نوشتهاید و میخواهید آن را بهعنوان یک سرویس دائمی روی سرور اجرا
کنید، طوری که با ریاستارت سرور خودش بالا بیاید و اگر کرش کرد، دوباره اجرا شود. راه درست این کار، نوشتن یک
service unit است، نه استفاده از nohup یا screen.
فایلهای unit سفارشی معمولاً در مسیر /etc/systemd/system/ قرار میگیرند:
[Unit]
Description=API سرویس داخلی شرکت
After=network.target
[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/venv/bin/python manage.py runserver 0.0.0.0:8000
Restart=on-failure
RestartSec=5
Environment=DJANGO_SETTINGS_MODULE=config.settings.production
[Install]
WantedBy=multi-user.target
بخش [Unit] توضیح و وابستگیها را مشخص میکند؛ After=network.target یعنی این
سرویس باید پس از آماده شدن شبکه اجرا شود. بخش [Service] نحوه اجرا را تعیین میکند:
Type=simple یعنی فرایند اصلی همان چیزی است که ExecStart اجرا میکند؛ Restart=on-failure
تضمین میکند در صورت کرش، سرویس خودکار دوباره بالا بیاید؛ و User تعیین میکند سرویس با چه کاربری
اجرا شود تا از اجرای بیدلیل با root جلوگیری شود. بخش [Install] مشخص میکند این سرویس در کدام
مرحله بوت فعال شود.
پس از ساخت یا ویرایش فایل، باید systemd را از تغییرات مطلع کرد:
sudo systemctl daemon-reload
sudo systemctl enable --now myapp.service