Sì; ma prima aggiusta il tuo programma buggy prima di armeggiare con systemd.
MariusMatutiae è abbastanza corretta. Hai un problema con il tuo programma. È deadlock. Giocherellare con systemd non è la risposta. Nella migliore delle ipotesi, è una distrazione. Correggi il tuo programma in modo che non sia rotto. Dirigi le tue energie con la cosa giusta.
Detto questo, altre persone verranno qui a causa del titolo della domanda, piuttosto che della domanda vera e propria. A loro vantaggio, ecco la risposta al titolo, ignorando la domanda vera e propria:
Sì, systemd può monitorare i demoni e riavviarli automaticamente se smettono di parlare. Ma non tutti i vecchi demoni. Come nota la MVP, non c'è modo di sapere che un demone è stato appeso (in questo universo, dove il problema della fermata è indecidibile, almeno). Né systemd né alcun altro programma per computer saranno mai in grado di dedurre da zero che un programma casuale lanciato su di essi ha un deadlock, o è finito in un loop infinito, o qualsiasi altra cosa. Il meglio che otterrete qui è la rilevazione che un demone non ha eseguito una normale operazione "battito cardiaco" entro un intervallo di tempo richiesto.
I demoni che sfruttano le capacità di watchdog di systemd, pertanto, devono essere scritti per parlare di un protocollo systemd-specific, il protocollo sd_notify. Questo complica un po 'il codice dei demoni. È complicato perché i demoni dovrebbero, se scritti correttamente, controllare se sono stati richiamati anche con la funzione di watchdog abilitata.
Un demone che parla questo protocollo per utilizzare la capacità di watchdog di systemd ...
- ... deve controllare per
WATCHDOG_USEC
variabile d'ambiente;
- ... deve chiamare sd_notify () continuamente e frequentemente, per tutta la sua vita, con il
WATCHDOG=1
opzione impostata, ad un intervallo di circa WATCHDOG_USEC
/ 2 ("USEC" sta per microsecondi);
- … deve avere
Type=notify
impostato nel suo file unitario;
- … avrebbe dovuto
NotifyAccess=main
(o =all
) impostato nel suo file unitario;
- … deve avere
WatchdogSec=
secondi impostato nel suo file di unità.
- ... deve collegarsi con
libsystemd-daemon.so
Se vuoi conoscere i dettagli della codifica, dopo aver letto il manuale, assicurati di andare sul StackExchange giusto. Questo è SuperUser. StackOverflow è laggiù .
Ulteriori letture
for(;;) do_something();
?