Während ich an einer Lösung arbeite, die Dateisperrung verwendet, glaube ich, dass mein Code in einen Deadlock gerät. Ich verwende systemd, um den Prozess beim Systemstart zu starten. Die Verwendung von Alarm (3) ist eine Option, aber ich habe mich gefragt, ob systemd blockierte Prozesse erkennen und neu starten kann.
Um dieses Problem vorerst zu umgehen, habe ich vor, mir die journalctl-Ausgabe anzuschauen. Wenn sie sich für einen bestimmten Zeitraum nicht ändert, würde ich den Prozess über ein Shell-Skript beenden.
Ich frage mich nur, ob es eine bessere Möglichkeit gibt, Prozesse über systemd oder auf andere Weise zu überwachen.
monitoring
systemd
Freidenker
quelle
quelle
for(;;) do_something();
?Antworten:
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 ...
WATCHDOG_USEC
Umgebungsvariablen suchen;WATCHDOG=1
Option in einem Intervall von ungefährWATCHDOG_USEC
/ 2 aufrufen ("USEC" steht für Mikrosekunden);Type=notify
in seiner Unit-Datei eingestellt sein;NotifyAccess=main
(oder=all
) in seiner Unit-Datei gesetzt haben;WatchdogSec=
Sekunden eingestellt haben .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
quelle