Sim; mas primeiro corrija seu programa de bugs antes de mexer com o systemd.
MariusMatutiae está correto. Você tem um problema com o seu programa. Isso é um impasse. Brincando com systemd não é a resposta. Na melhor das hipóteses, é uma distração. Corrija seu programa para que ele não seja quebrado. Direcione suas energias para a coisa certa.
Dito isto, outras pessoas virão aqui por causa do título da pergunta, em vez da pergunta apropriada. Para o benefício deles, aqui está a resposta para o título, ignorando a questão:
Sim, o systemd pode monitorar os daemons e reiniciá-los automaticamente se eles pararem de falar. Não apenas qualquer velho daemon, no entanto. Como observa o mvp, não há como saber que um daemon foi pendurado (neste universo, onde o problema da suspensão é indecidível, pelo menos). Nem o systemd nem qualquer outro programa de computador jamais será capaz de deduzir a partir do zero que algum programa aleatório lançado para eles tenha um impasse, ou entrado em um loop infinito, ou o que quer que seja. O melhor que você vai conseguir aqui é detectar que um daemon não realizou uma operação regular de "pulsação" dentro de um tempo necessário.
Os daemons que aproveitam os recursos do watchdog do systemd, portanto, precisam ser escritos para falar um protocolo específico do systemd, o protocolo sd_notify. Isso complica o código do daemon um pouco. É mais complicado porque os daemons devem, se escritos corretamente, verificar se foram chamados com a função watchdog também.Um daemon que fala este protocolo para fazer uso da capacidade de vigilância do systemd…
- … deve verificar a variável de ambiente
WATCHDOG_USEC
; - … deve ligar sd_notify () de forma contínua e frequente, ao longo da sua vida útil, com a
WATCHDOG=1
conjunto de opções, em um intervalo de cerca deWATCHDOG_USEC
/ 2 ("USEC" significa microssegundos); - … deve ter
Type=notify
definido em seu arquivo de unidade; - … deve ter
NotifyAccess=main
(ou=all
) definido em seu arquivo de unidade; - … deve ter
WatchdogSec=
segundos definido em seu arquivo de unidade. - … deve vincular com
libsystemd-daemon.so
Se você quiser saber os detalhes da codificação, depois de ler o manual, certifique-se de ir ao StackExchange correto. Este é o SuperUser. O StackOverflow é ao lado .
Leitura adicional
- Lennart Poettering. 2011-04-12. cães de guarda . Freedesktop.org.