Frage systemd service automatischer Neustart nach StartLimitInterval


Ich möchte, dass mein Systemdienst bei einem Fehler automatisch neu gestartet wird. Zusätzlich möchte ich die Neustarts einschränken. Ich möchte maximal 3 Neustarts innerhalb von 90 Sekunden erlauben. Daher habe ich folgende Konfiguration vorgenommen.

[Bedienung]
Neustart = immer
StartLimitInterval = 90
StartLimitBurst = 3

Jetzt wird der Dienst bei einem Fehler neu gestartet. Nach 3 schnellen Fehlern / Neustarts wird nicht mehr wie erwartet neu gestartet. Jetzt habe ich erwartet, dass der Systemd den Dienst nach dem Timeout startet (StartLimitInterval). Aber das Systemd startet den Dienst nach dem Timeout (90sec) nicht automatisch, wenn ich den Dienst nach dem Timeout manuell neu starte. Aber ich möchte das Systemd den Dienst nach StartLimitInterval automatisch starten. Bitte lassen Sie mich wissen, wie Sie diese Funktion erreichen können.


19
2017-11-16 06:15


Ursprung


Ich habe einen Artikel geschrieben, der erklärt, wie man einen Service erstellt und wie man dieses spezielle Problem vermeidet: Erstellen eines Linux-Dienstes mit Systemd. - Benjamin
Ich denke, du suchst StartLimitIntervalSecnicht StartLimitInterval. - Marc Tamsky


Antworten:


Um einen Dienst drei Mal im Abstand von 90 Sekunden neu starten zu lassen, müssen Sie die folgenden Zeilen in Ihre Systemd-Service-Datei einfügen:

Restart=always
RestartSec=90
StartLimitInterval=400
StartLimitBurst=3

Das funktionierte bei mir für einen Dienst, der ein Skript mit 'Type = idle' ausführt. Beachten Sie, dass 'StartLimitInterval' größer als 'RestartSec * StartLimitBurst' sein muss, andernfalls wird der Dienst auf unbestimmte Zeit neu gestartet.

Ich brauchte einige Zeit mit viel Versuch und Irrtum, um herauszufinden, wie Systemd diese Optionen verwendet, was darauf hindeutet, dass Systemd nicht so gut dokumentiert ist, wie man es erwarten würde. Diese Optionen bieten effektiv die Wiederholungszykluszeit und die maximalen Wiederholungsversuche, nach denen ich gesucht habe.


13
2017-09-02 04:41





Das Verhalten, das Sie beschreiben, stimmt mit der Dokumentation überein:

StartLimitInterval =, StartLimitBurst = Konfigurieren Sie die Startratenbegrenzung für den Dienst. Standardmäßig dürfen Dienste, die mehr als 5 Mal innerhalb von 10 Sekunden gestartet werden, nicht mehr bis zum Ende des 10-Sekunden-Intervalls gestartet werden. Mit diesen beiden Optionen kann diese Ratenbegrenzung modifiziert werden. Verwenden Sie StartLimitInterval = zum Konfigurieren des Überprüfungsintervalls (standardmäßig auf DefaultStartLimitInterval = in der Manager-Konfigurationsdatei, auf 0, um jede Art von Ratenbegrenzung zu deaktivieren). Verwenden Sie StartLimitBurst = um zu konfigurieren, wie viele Starts pro Intervall zulässig sind (Standardwert ist DefaultStartLimitBurst = in der Manager-Konfigurationsdatei). Diese Konfigurationsoptionen sind besonders nützlich in Verbindung mit Restart =; Sie gelten jedoch für alle Arten von Starts (einschließlich manueller), nicht nur für diejenigen, die durch die Restart = -Logik ausgelöst werden. Beachten Sie, dass Einheiten, die für Restart = konfiguriert sind und die Startgrenze erreichen, nicht mehr neu gestartet werden sollen. Sie können jedoch zu einem späteren Zeitpunkt noch manuell neu gestartet werden. Ab diesem Zeitpunkt wird die Neustartlogik erneut aktiviert. Beachten Sie, dass systemctl reset-failed dazu führt, dass der Zähler für die Neustartrate für einen Dienst gelöscht wird. Dies ist nützlich, wenn der Administrator einen Dienst manuell starten möchte und das Startlimit damit kollidiert.

Ich versuche immer noch, einen Weg zu finden, um das gewünschte Verhalten zu erreichen.


9
2018-02-02 12:16



Dies ist mehr ein Kommentar als eine Antwort, wie Sie darauf hinweisen. - Dave M
genau was ich brauchte, ty - Some Linux Nerd


Sie können einstellen OnFailureum einen anderen Dienst zu starten, wenn dies fehlschlägt. In dem On-Fail-Service Sie können ein Skript ausführen, das Ihren Dienst wartet und anschließend neu startet.

Ein Beispiel für die Einrichtung finden Sie unter Systemstatus-Mail bei Geräteausfall und ändern Sie es, um den Dienst stattdessen neu zu starten.


1
2018-05-13 08:43