Ich habe einen backup.service , der jede Stunde von einem backup.timer aufgerufen wird . Leider kann das im Container ausgeführte Sicherungsskript erfolgreich abgeschlossen werden, wobei jedoch Warnungen einen Exit-Code ungleich Null zurückgeben. Obwohl möglicherweise alles funktioniert hat, stoppt der Container mit einem Exitcode ungleich Null. Die Einheit tritt also in der Flotte in einen ausgefallenen Zustand ein.
Und in diesem Fall scheint der Timer dieses Gerät nicht erneut zu starten, obwohl ich in den systemd-Dokumenten nichts gefunden habe, was dies sagt.
Um es klar zu machen: Es ist für mich vollkommen in Ordnung, den Container mit einem Exit-Code ungleich Null anhalten zu lassen. Aber mein Timer funktioniert dann nicht.
Ich könnte dieses Skript jetzt in einem anderen zusammenfassen, das dann als Docker-Einstiegspunkt bezeichnet wird. Aber ich muss sicherstellen, dass die Ausgabe auf STDOUT und STDERR irgendwie erhalten bleibt.
Ich könnte auch sudo systemctl reset-failed ausführen, nachdem das Gerät ausgefallen ist, aber das scheint mir ein wenig hackig zu sein ... (Ich habe das versucht und in diesem Fall hat der Timer das Gerät erneut ausgeführt. Aber es funktioniert nicht als ExecStopPost -Aufgabe in der Servicedatei)
Gibt es einen besseren Weg, um sicherzustellen, dass eine Einheit
- tritt nicht in den Status "Fehlgeschlagen" ein, obwohl er ungleich Null zurückgibt, oder
- Setzen Sie den Status danach zurück oder
- Sagen Sie dem Timer, dass er das Gerät ausführen soll, obwohl sein Status fehlgeschlagen ist .
-
in meinenExecPre
-Tasks. Ich habe das einfach nicht als Lösung erkannt ... Du hast meinen Tag gemacht. Vielen DankFalls Sie ignorieren einige Rückgabewerte, wollen aber noch einige andere zählen als Fehler systemd, können Sie sie in den angeben
[Service]
Abschnitt Ihrer .service Datei als durch Leerzeichen getrennte Liste zuSuccessExitStatus
,RestartPreventExitStatus
undRestartForceExitStatus
. Diese nehmen auch Signalnamen an.Referenz: man 5 systemd.service
quelle