Remarque: j'ai écrit un article sur Medium qui explique comment créer un service et comment éviter ce problème particulier: Création d'un service Linux avec systemd .
Question originale:
J'utilise systemd pour garder un script de travail actif à tout moment:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Bien que le redémarrage fonctionne correctement si le script se ferme normalement après quelques minutes, j'ai remarqué que s'il échouait à plusieurs reprises au démarrage, il systemd
cesserait simplement d'essayer de le démarrer:
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'.
De même, si mon script de travail échoue plusieurs fois avec un état de sortie égal à 255
, systemd
renonce à essayer de le redémarrer:
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'.
Y a-t-il un moyen de forcer systemd
à toujours réessayer après quelques secondes?
StartLimitIntervalSec=0
and voilà.