تشغيل تطبيق بـ & أو nohup جيد حتى يُعاد إقلاع الخادم، أو تتعطّل العملية، أو تريد إيجاد سجلّاتها — عندها ينهار. systemd هو الجواب القياسي: يبدأ تطبيقك عند الإقلاع، ويعيد تشغيله إن مات، ويلتقط سجلّاته. تحويل سكربت أو ثنائي إلى خدمة مُدارة هو ملف صغير واحد.
1. اكتب ملف وحدة
أنشئ /etc/systemd/system/myapp.service:
[Unit]
Description=My application
After=network.target
[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
اضبط ExecStart وWorkingDirectory وUser بما يلائم تطبيقك. Restart=always هو ما يُبقيه حيًّا.
2. أنشئ مستخدمًا مخصصًا (مُوصى به)
sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp
التشغيل كمستخدم غير جذري يحدّ من الضرر إن اختُرق التطبيق يومًا.
3. فعّله وابدأه
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
enable يجعله يبدأ عند الإقلاع؛ و--now يبدأه فورًا.
4. تحقّق من الحالة والسجلّات
sudo systemctl status myapp
journalctl -u myapp -f # متابعة السجلّات الحية
أوامر يومية
sudo systemctl restart myapp # إعادة التشغيل بعد تغيير
sudo systemctl stop myapp # أوقفه
sudo systemctl disable myapp # أوقف بدأه عند الإقلاع
تحذيرات صادقة
- شغّل
daemon-reloadبعد تحرير ملف وحدة، وإلا استخدم systemd النسخة القديمة. - احذر حلقات الأعطال. إن فشل التطبيق فورًا، يعيد
Restart=alwaysالمحاولة إلى الأبد — يُباعدRestartSec=5المحاولات؛ أصلح الخطأ الجذري عبر السجلّات. - فضّل
User=غير جذري كي لا يمتلك تطبيق مُختَرق الخادم كله.
الخطوات التالية
خدمة systemd هي كيف تُبقي أي شيء يعمل على مدار الساعة — مثلًا وكيل ذكاء اصطناعي يعمل على مدار الساعة أو المُرحِّل خلف خادم RustDesk مُستضاف ذاتيًا. إن كان تطبيقك في حاوية بدلاً من ذلك، يؤدي --restart unless-stopped في Docker الدور نفسه — راجع كيف تثبّت Docker.
التعليقات
لا تعليقات بعد. كن الأول.