Ja; aber zuerst das fehlerhafte Programm reparieren, bevor mit systemd herumgespielt wird.
Marius Matutiae ist ganz richtig. Sie haben ein Problem mit Ihrem Programm. Es blockiert. Sich mit systemd zu beschäftigen ist nicht die Antwort. Bestenfalls ist es eine Ablenkung. Korrigieren Sie Ihr Programm, damit es nicht kaputt geht. Lenke deine Energien auf das Richtige.
Das heißt, andere Leute werden wegen des Fragentitels und nicht wegen der eigentlichen Frage hierher kommen. Hier ist die Antwort auf den Titel, wobei die eigentliche Frage ignoriert wird:
Ja, systemd kann Dæmons überwachen und automatisch neu starten, wenn sie aufhören zu sprechen. Aber nicht irgendwelche alten Dæmons. Wie mvp bemerkt, gibt es keine Möglichkeit zu wissen, dass ein Dæmon hängen geblieben ist (zumindest in diesem Universum, in dem das Stopp-Problem nicht zu entscheiden ist). Weder systemd noch ein anderes Computerprogramm wird jemals von Grund auf feststellen können, dass ein zufälliges Programm blockiert ist oder in eine Endlosschleife geraten ist oder was auch immer. Das Beste, was Sie hier finden, ist festzustellen, dass ein Dæmon innerhalb eines bestimmten Zeitraums keine reguläre "Heartbeat" -Operation durchgeführt hat.
Daher müssen Dæmons, die die Watchdog-Funktionen von systemd nutzen, so geschrieben werden, dass sie ein systemd-spezifisches Protokoll, das sd_notify-Protokoll, sprechen. Dies erschwert den Dæmon-Code ein wenig. Es ist noch komplizierter, da Dæmons, wenn sie richtig geschrieben sind, auch prüfen sollten, ob sie mit aktivierter Watchdog-Funktion aufgerufen wurden.
Ein Daemon, das dieses Protokoll spricht, um die Watchdog-Fähigkeit von systemd zu nutzen ...
- … Muss nach der
WATCHDOG_USEC
Umgebungsvariablen suchen;
- … Muss sd_notify () während seiner gesamten Lebensdauer kontinuierlich und häufig mit der festgelegten
WATCHDOG=1
Option in einem Intervall von ungefähr WATCHDOG_USEC
/ 2 aufrufen ("USEC" steht für Mikrosekunden);
- … Muss
Type=notify
in seiner Unit-Datei eingestellt sein;
- … Sollte
NotifyAccess=main
(oder =all
) in seiner Unit-Datei gesetzt haben;
- … Muss in der Unit-Datei
WatchdogSec=
Sekunden eingestellt haben .
- … Muss sich verbinden mit
libsystemd-daemon.so
Wenn Sie nach dem Lesen des Handbuchs die Details zur Codierung erfahren möchten, stellen Sie sicher, dass Sie zum richtigen StackExchange wechseln. Das ist SuperUser. StackOverflow ist da drüben .
Weitere Lektüre
- Lennart Pöttering. 2011-04-12. Wachhunde . Freedesktop.org.
for(;;) do_something();
?