أمران يتشابه وقعُهما ويفعلان شيئين مختلفين. وكلُّ «كان يعمل حتى أعدنا التشغيل» تقريبًا هو هذا.

  • start — شغّله الآن. ولا يقول شيئًا عن المرّة القادمة.
  • enable — شغّله عند الإقلاع. ولا يبدؤه الآن.
  • enable --now — الاثنان معًا، وهو ما قصدته في الغالب الأعمّ.
systemctl enable --now nginx
systemctl is-enabled nginx
systemctl is-active nginx

قراءة الحالة

systemctl status php8.3-fpm
  • active (running) — كما هو متوقَّع.
  • active (exited) — عمل وانتهى. صوابٌ لمهمّةٍ لمرّةٍ واحدة، خطأٌ لعفريت.
  • failed — توقّف ولم يعد. والسببُ في السجلّ.
  • activating (auto-restart) — يدور في حلقة انهيار. وإعادةُ تشغيله ثانيةً لن تنفع.

لِمَ أخفق

journalctl -u php8.3-fpm --since "1 hour ago" --no-pager | tail -40

أعد التحميل لا التشغيل

الأمر restart يُسقط كلّ اتّصالٍ جارٍ. وreload يعيد قراءة الإعداد ويُبقيها. فلخادم وِبٍ أو قاعدة بيانات أعد التحميل، إلّا أن يحتاج التغييرُ إعادةَ تشغيلٍ حقًّا — وافحص الإعداد أوّلًا: nginx -t.

وحدةٌ من عندك

# /etc/systemd/system/queue-worker.service
[Unit]
Description=Queue worker
After=network.target mariadb.service

[Service]
User=www-data
ExecStart=/usr/bin/php8.3 /var/www/site/worker.php
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now queue-worker
نفّذ daemon-reload بعد تحرير أيّ ملفّ وحدة. فبدونه يظلّ systemd يشغّل التعريف القديم، ويبدو تغييرُك كأنّه لم يفعل شيئًا.