أمران يتشابه وقعُهما ويفعلان شيئين مختلفين. وكلُّ «كان يعمل حتى أعدنا التشغيل» تقريبًا هو هذا.
- 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 يشغّل التعريف القديم، ويبدو تغييرُك كأنّه لم يفعل شيئًا.