Hinweis: Ich habe einen Artikel über Medium geschrieben, in dem erläutert wird, wie ein Dienst erstellt und dieses spezielle Problem vermieden wird : Erstellen eines Linux-Dienstes mit systemd .
Ursprüngliche Frage:
Ich verwende systemd, um ein Arbeitsskript immer am Laufen zu halten:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Obwohl der Neustart problemlos funktioniert, wenn das Skript nach einigen Minuten normal beendet wird, habe ich festgestellt, dass der systemd
Versuch, es zu starten , einfach aufgegeben wird , wenn es beim Start wiederholt nicht ausgeführt wird:
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'.
Wenn mein Arbeitsskript mehrmals mit dem Beendigungsstatus "" fehlschlägt 255
, systemd
wird der Versuch, es neu zu starten, abgebrochen:
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'.
Gibt es eine Möglichkeit zu zwingen systemd
zu immer nach ein paar Sekunden noch einmal versuchen?
StartLimitIntervalSec=0
und voilà.