fundo
Me pediram para criar um systemd
script para um novo serviço, foo_daemon
que às vezes entra em "estado ruim" e não morre SIGTERM
(provavelmente devido ao manipulador de sinal personalizado). Isso é problemático para os desenvolvedores, pois eles são instruídos a iniciar / parar / reiniciar o serviço via:
systemctl start foo_daemon.service
systemctl stop foo_daemon.service
systemctl restart foo_daemon.service
Problema
Às vezes, devido a foo_daemon
entrar em um estado ruim, temos que matá-lo à força via:
systemctl kill -s KILL foo_daemon.service
Questão
Como posso configurar meu systemd
script para foo_daemon
que, sempre que um usuário tentar parar / reiniciar o serviço systemd
,:
- Tente desligar normalmente a
foo_daemon
viaSIGTERM
. - Dê até 2 segundos para que o desligamento / término
foo_daemon
seja concluído. - Tente desligar a
foo_daemon
viaSIGKILL
se o processo ainda estiver ativo (portanto, não corremos o risco de o PID ser reciclado esystemd
problemasSIGKILL
com o PID errado). O dispositivo que estamos testando gera / bifurca-se rapidamente em vários processos, portanto , existe uma preocupação rara, mas muito real, com a reciclagem de PID, causando um problema. - Se, na prática, estou apenas paranóico com a reciclagem de PID, estou bem com o script emitido
SIGKILL
contra o PID do processo sem me preocupar em matar um PID reciclado.