Tak; ale najpierw napraw swój buggy program przed manipulowaniem systememd.
MariusMatutiae ma rację. Masz problem ze swoim programem. To blokuje. Manipulowanie systemem nie jest odpowiedzią. W najlepszym razie jest to rozproszenie uwagi. Napraw swój program, aby nie był uszkodzony. Skieruj swoje energie na właściwe rzeczy.
To powiedziawszy, inni ludzie przyjdą tutaj z powodu tytułu pytania, a nie właściwego pytania. Dla ich korzyści, oto odpowiedź na tytuł, ignorując pytanie właściwe:
Tak, systemd może monitorować demony i automatycznie je ponownie uruchamiać, jeśli przestaną mówić. Jednak nie tylko stare demony. Jak zauważa mvp, nie ma sposobu, aby wiedzieć, że demon zawisł (w tym wszechświecie, gdzie problem z zatrzymaniem jest przynajmniej nierozstrzygalny). Ani systemowy, ani żaden inny program komputerowy nigdy nie będzie w stanie wydedukować od zera, że jakiś losowy program, który został na nich rzucony, jest zakleszczony lub trafił do nieskończonej pętli, lub cokolwiek innego. Najlepsze, co tu dostaniesz, to wykrycie, że demon nie przeprowadził regularnej operacji „bicia serca” w wymaganym czasie.
Dlatego demony, które wykorzystują możliwości watchdoga systemd, muszą być napisane, aby mówić protokołem specyficznym dla systemu, czyli protokołem sd_notify. To komplikuje kod demona. Jest to bardziej skomplikowane, ponieważ dæmons powinny, jeśli zostaną poprawnie napisane, sprawdzić, czy zostały wywołane z włączoną funkcją watchdog.
Demona, który mówi tym protokołem, aby skorzystać z możliwości watchdoga systemd…
- … Musi sprawdzić
WATCHDOG_USEC
Zmienna środowiskowa;
- … Musi zadzwonić sd_notify () stale i często, przez całe życie, z
WATCHDOG=1
zestaw opcji w odstępie około WATCHDOG_USEC
/ 2 („USEC” oznacza mikrosekundy);
- … muszę mieć
Type=notify
ustawione w pliku jednostki;
- … Powinien
NotifyAccess=main
(lub =all
) ustawiony w pliku jednostki;
- … muszę mieć
WatchdogSec=
sekundy ustawić w pliku jednostki.
- … Musi się połączyć
libsystemd-daemon.so
Jeśli chcesz poznać szczegóły tego kodowania, po przeczytaniu podręcznika upewnij się, że idziesz do właściwego StackExchange. To jest SuperUser. StackOverflow jest tam .
Dalsza lektura
- Lennart Poettering. 2011-04-12. Strażnicy . Freedesktop.org.
for(;;) do_something();
?