Begrenzen Sie die manuelle Neustartrate des Systemd-Dienstes

Begrenzen Sie die manuelle Neustartrate des Systemd-Dienstes

Ich habe ein System, bei dem ein Dienst (z. B. nginx) manchmal übermäßig oft durch „systemd restart nginx“ neu gestartet wird (als Ergebnis anderer Skripte, z. B. um eine neue Konfiguration anzuwenden oder Protokolle zu rotieren).

Selbst wenn ein Dienst auf diese Weise „manuell“ neu gestartet wird, schlägt systemd mit der Neustartratenbegrenzung fehl. Außerdem ist es natürlich nicht sinnvoll, nginx 10 Mal in einer bestimmten Sekunde neu zu starten.

Wie kann man also die manuelle Neustartrate der Dienste begrenzen? Gibt es so etwas wie eine Neustart-Abkühlungsphase, die auch für manuelle Neustartanforderungen gilt? Die üblichen Einstellungen gelten anscheinend alle für den automatischen Neustart durch systemd.

Antwort1

Dies erreichen Sie mit StartLimitIntervalSecund StartLimitBurst.

Aus der Manpage der Systemd-Einheit:

StartLimitIntervalSec=Intervall, StartLimitBurst=Burst

Konfigurieren Sie die Startratenbegrenzung für Einheiten. Einheiten, die innerhalb einer Intervallzeitspanne öfter als Burst-mal gestartet werden, dürfen nicht mehr gestartet werden. Verwenden Sie StartLimitIntervalSec=, um das Prüfintervall zu konfigurieren, und StartLimitBurst=, um zu konfigurieren, wie viele Starts pro Intervall zulässig sind.

Intervall ist eine Zeitspanne mit der Standardeinheit Sekunden, es können aber auch andere Einheiten angegeben werden, siehe systemd.time(5). In der Manager-Konfigurationsdatei ist standardmäßig DefaultStartLimitIntervalSec= eingestellt und kann auf 0 gesetzt werden, um jede Art von Ratenbegrenzung zu deaktivieren. Burst ist eine Zahl und in der Manager-Konfigurationsdatei standardmäßig DefaultStartLimitBurst= eingestellt.

Diese Konfigurationsoptionen sind insbesondere im Zusammenhang mit der Diensteinstellung Restart= (siehe systemd.service(5)) nützlich. Sie gelten allerdings für alle Startarten (einschließlich manueller), nicht nur für solche, die durch die Restart=-Logik ausgelöst werden.

Beachten Sie, dass Units, die für Restart= konfiguriert sind und die Startbegrenzung erreichen, nicht mehr neu gestartet werden; sie können jedoch zu einem späteren Zeitpunkt, nachdem das Intervall abgelaufen ist, noch manuell oder über einen Timer oder Socket neu gestartet werden. Ab diesem Zeitpunkt wird die Neustartlogik wieder aktiviert. systemctl reset-failed bewirkt, dass der Neustartratenzähler für einen Dienst geleert wird, was nützlich ist, wenn der Administrator eine Unit manuell starten möchte und die Startbegrenzung dies verhindert. Die Ratenbegrenzung wird erzwungen, nachdem alle Unit-Zustandsprüfungen ausgeführt wurden, und daher werden Unit-Aktivierungen mit fehlgeschlagenen Bedingungen nicht auf die Ratenbegrenzung angerechnet.

Antwort2

Welche Betriebssystemversion verwenden Sie? Wurde das nginx-Paket über das Repository der Linux-Distribution oder aus dem Quellcode installiert?

Vielleicht können die Antworten auf diese Fragen dabei helfen, den möglichen Weg zur Behebung des Problems zu ermitteln.

verwandte Informationen