Nota: ho scritto un articolo su Medium che spiega come creare un servizio e come evitare questo particolare problema: la creazione di un servizio Linux con systemd .
Domanda originale:
Sto usando systemd per far funzionare sempre uno script di lavoro:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Sebbene il riavvio funzioni correttamente se lo script termina normalmente dopo alcuni minuti, ho notato che se non viene eseguito ripetutamente all'avvio, systemd
smetterà di provare ad avviarlo:
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'.
Allo stesso modo, se il mio script worker non riesce più volte con uno stato di uscita di 255
, systemd
rinuncia a provare a riavviarlo:
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'.
C'è un modo per forzare systemd
a riprovare sempre dopo qualche secondo?
StartLimitIntervalSec=0
e voilà.