Uwaga: Napisałem artykuł na Medium, który wyjaśnia, jak utworzyć usługę i jak uniknąć tego konkretnego problemu: Tworzenie usługi Linux za pomocą systemd .
Oryginalne pytanie:
Używam systemd, aby skrypt roboczy działał przez cały czas:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Chociaż restart działa poprawnie, jeśli skrypt zakończy się normalnie po kilku minutach, zauważyłem, że jeśli wielokrotnie nie uruchamia się przy starcie, systemd
po prostu zrezygnuje z próby uruchomienia:
Jun 14 11:10:31 localhost systemd[1]: test.service: Main process exited, code=exited, status=1/FAILURE
Jun 14 11:10:31 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:10:31 localhost systemd[1]: test.service: Failed with result 'exit-code'.
Jun 14 11:10:31 localhost systemd[1]: test.service: Service hold-off time over, scheduling restart.
Jun 14 11:10:31 localhost systemd[1]: test.service: Start request repeated too quickly.
Jun 14 11:10:31 localhost systemd[1]: Failed to start My worker.
Jun 14 11:10:31 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:10:31 localhost systemd[1]: test.service: Failed with result 'start-limit'.
Podobnie, jeśli mój skrypt roboczy kilkakrotnie zawiedzie ze statusem wyjścia 255
, systemd
rezygnuje z próby jego ponownego uruchomienia:
Jun 14 11:25:51 localhost systemd[1]: test.service: Failed with result 'exit-code'.
Jun 14 11:25:51 localhost systemd[1]: test.service: Service hold-off time over, scheduling restart.
Jun 14 11:25:51 localhost systemd[1]: test.service: Start request repeated too quickly.
Jun 14 11:25:51 localhost systemd[1]: Failed to start My worker.
Jun 14 11:25:51 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:25:51 localhost systemd[1]: test.service: Failed with result 'start-limit'.
Czy istnieje sposób, aby zmusić zawszesystemd
do ponownej próby po kilku sekundach?
StartLimitIntervalSec=0
i voilà.