Verwenden Sie die systemd Watchdog-Unterstützung, um die Anwendung neu zu starten

Verwenden Sie die systemd Watchdog-Unterstützung, um die Anwendung neu zu starten

Ich habe eine einfache systemdService-Unit, um mein pythonSkript bei unbedingten Exits neu zu starten, die in der Service-Definition definiert ist . Ich möchte nur absolut sichergehen, dass ich das Skript neu starten kann, selbst wenn es irgendwie hängen bleibt, indem ich die Variable in der Unit-Datei Restart=alwaysaktiviere .WatchdogSec=

Mein Problem ist dieoffizielle Dokumente für das Journal von systemderklärt es nicht klar.

Zitat von derselben Seite:

WatchdogSec=

Konfiguriert den Watchdog-Timeout für einen Dienst. Der Watchdog wird aktiviert, wenn der Startvorgang abgeschlossen ist. Der Dienst muss sd_notify(3)regelmäßig mit anrufen "WATCHDOG=1"(also den „Keep-Alive-Ping“).

Unklar ist nur, ob dieServiceselbst kümmert sich um die Aufrechterhaltung der Pings mit dem Watchdog-Dienst (oder) die ausgeführte Anwendung (in meinem Fall ein Python-Skript) muss den Ping aufrechterhalten, indem sie die erwähnte Umgebungsvariable aktualisiert.

Meine einfache Servicedefinition

[Unit]
Description=dev-Status: Computes RF device availability status
           
[Service]
Type=simple

EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
RestartSec=10
Restart=always
         
[Install]
WantedBy=default.target

Wenn ich also zu dieser Servicedatei einfach die folgende Zeile hinzufüge, wird mein Skript dann automatisch neu gestartet?

WatchdogSec=30s

Antwort1

Um den Watchdog zu "patschen" oder anzupingen, können Sie den Python-BefehlsystemdPaket zum Senden der Benachrichtigung:

from systemd.daemon import notify, Notification
notify(Notification.WATCHDOG)

verwandte Informationen