Podczas pracy nad rozwiązaniem, które wykorzystuje blokowanie plików, uważam, że mój kod staje się martwy. Używam systemd, aby rozpocząć proces uruchamiania systemu. Używanie alarmu (3) jest opcją, ale zastanawiałem się, czy istnieje sposób, aby systemd wykrył zawieszone procesy i ponownie je uruchomił?
Obecnie, aby na razie obejść ten problem, zamierzam przyjrzeć się wynikom dziennika i jeśli nie zmieni się to przez określony czas, zabiłbym ten proces za pomocą skryptu powłoki.
Zastanawiam się tylko, czy istnieje lepszy sposób monitorowania procesów poprzez systemd lub w inny sposób.
monitoring
systemd
freethinker
źródło
źródło
for(;;) do_something();
?Odpowiedzi:
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…
WATCHDOG_USEC
Zmienna środowiskowa;WATCHDOG=1
zestaw opcji w odstępie okołoWATCHDOG_USEC
/ 2 („USEC” oznacza mikrosekundy);Type=notify
ustawione w pliku jednostki;NotifyAccess=main
(lub=all
) ustawiony w pliku jednostki;WatchdogSec=
sekundy ustawić w pliku jednostki.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
źródło