systemd و نوشتن Unit

نوشتن یک service unit سفارشی

ساخت سرویس اختصاصی برای برنامه خودتان

فرض کنید یک برنامه پایتون یا 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

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.