
Ich habe eine einfache systemd
Service-Unit, um mein python
Skript 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=always
aktiviere .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)