Ich habe die Manpage zum systemd-Dienst ein paar Mal gelesen, kann aber immer noch kein grundlegendes systemd-Muster herausfinden:
Ich möchte einen einmaligen Startvorgang (wie einen Docker-Container oder das Formatieren eines Laufwerks) beim Booten erfolgreich abschließen. Wenn ich dafür jedoch Type = oneshot verwende, kann ich Restart = on-failure nicht verwenden. Wenn dies fehlschlägt, wird der Auftrag nicht wiederholt. Vermisse ich hier etwas Offensichtliches?
Ich habe auch versucht, Type = simple mit Restart = on-failure zu setzen, aber in vielen Fällen brauche ich das folgende Verhalten (von der Manpage), das die OneShot-Dienste liefern:
Das Verhalten von oneshot ist ähnlich einfach; Es wird jedoch erwartet, dass der Prozess beendet werden muss, bevor systemd Nachfolgeeinheiten startet.
Aktualisierung:
Restart=durch Einstellen FailureAction=[self.unit](ersetzen Sie [self.unit] durch den Namen des Geräts). Es ist irgendwie abgedreht, aber zumindest explizit und leicht zu befolgen.
FailureActionnimmt die gleichen Werte an wie StartLimitActionund alle außer nonelösen eine Art Herunterfahren aus.
Restartund Umbrechen vonmy_cmd:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'zusammen mit einem angemessenenTimeoutStartSecWert.