Ich habe ein wirklich seltsames Problem mit systemd
. Wenn ich a ausstelle systemctl restart
, wird der neue Prozess gestartet, bevor der vorherige abgeschlossen ist.
Dies ist im Protokoll zu sehen, in dem die letzte Meldung zum Herunterfahren ("Protokoll schließen") nach der Startmeldung ("Protokoll öffnen") protokolliert wird.
Gibt es eine Möglichkeit, eine Verzögerung zwischen dem Stopp und dem Start des Prozesses hinzuzufügen?
systemctl stop myservice && sleep 3 && systemctl start myservice
Antworten:
In Ihren systemd-Dienstdateien können Sie die Option RestartSec festlegen, um eine Verzögerung für den Neustart hinzuzufügen. Siehe Beispiel unten:
Überprüfen Sie diesen Link für weitere Beispiele.
quelle
RestartSec
gilt nur für Dienste, die mit derRestart=
Richtlinie konfiguriert wurden, und wird bei der Ausführung von asystemctl restart someservice
RestartSec scheint nur verwendet zu werden, wenn dieser bestimmte Dienst über den Befehl systemctl restart neu gestartet wird.
Zum Beispiel habe ich zwei Dienste, A und B.
und
Wenn Sie einen Systemctl-Neustart B durchführen, funktioniert dies wie erwartet. Wenn Sie jedoch einen Systemctl-Neustart A durchführen, werden beide Dienste ohne Verzögerung gestoppt und sofort wieder gestartet.
Systemd verwendet anscheinend nur die Konfigurationswerte für den von Ihnen angegebenen Dienst und ignoriert sie für alle Abhängigkeiten.
Dies ist nicht so ungewöhnlich, wie es sich anhört. Wenn B mit einem Remote-Server kommuniziert, kann das schnelle Starten und Stoppen fehlschlagen, da das Remote-Ende den Client ablehnt. Ein direkter Neustart von A erfolgt jedoch immer dann, wenn A ohne Änderung von B aktualisiert wird.
Sie können dies wahrscheinlich umgehen, indem Sie die Verzögerung auch zu A hinzufügen. Sie sollten dies jedoch nicht MÜSSEN, da dies die Objektisolation unterbricht, indem Sie A über B informieren, wenn es sich nicht um eine Abhängigkeit handelt.
quelle