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.
[Unit]
Requires=network-online.target
[Service]
ExecStart=A-stuff
Restart=always
und
[Unit]
Requires=A.service
After=A.service
[Service]
ExecStart=B-stuff
Restart=always
RestartSec=30
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.
systemctl stop myservice && sleep 3 && systemctl start myservice