Dua perintah yang kedengarannya sama tetapi mengerjakan hal berbeda. Hampir setiap "tadinya jalan sampai kami menyalakan ulang" adalah ini.

  • start - jalankan sekarang. Tak berkata apa-apa tentang lain kali.
  • enable - jalankan saat mesin menyala. Tidak menyalakannya sekarang.
  • enable --now - keduanya sekaligus, dan hampir selalu itulah yang Anda maksud.
systemctl enable --now nginx
systemctl is-enabled nginx
systemctl is-active nginx

Membaca keadaannya

systemctl status php8.3-fpm
  • active (running) - seperti yang diharapkan.
  • active (exited) - ia berjalan lalu selesai. Benar untuk tugas sekali jalan, salah untuk sebuah daemon.
  • failed - ia berhenti dan tak kembali. Sebabnya ada di jurnal.
  • activating (auto-restart) - ia terjebak gelung kejatuhan. Menyalakannya ulang sekali lagi tak akan menolong.

Mengapa ia gagal

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

reload, bukan restart

restart menjatuhkan setiap sambungan yang sedang berjalan. reload membaca ulang konfigurasinya dan mempertahankan sambungan itu. Untuk server web atau basis data, pakai reload kecuali perubahannya memang benar-benar butuh restart - dan periksa dulu konfigurasinya: nginx -t.

Sebuah unit milik Anda sendiri

# /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
Jalankan daemon-reload sesudah menyunting berkas unit mana pun. Tanpa itu, systemd masih menjalankan definisi yang lama dan perubahan Anda tampak tak berbuat apa-apa.