Fondo
Me pidieron que creara un systemdscript para un nuevo servicio, foo_daemonque a veces entra en un "mal estado" y no morirá SIGTERM(probablemente debido a un controlador de señal personalizado). Esto es problemático para los desarrolladores, ya que se les indica que inicien / detengan / reinicien el servicio a través de:
systemctl start foo_daemon.servicesystemctl stop foo_daemon.servicesystemctl restart foo_daemon.service
Problema
A veces, debido a foo_daemonun mal estado, tenemos que matarlo por la fuerza a través de:
systemctl kill -s KILL foo_daemon.service
Pregunta
¿Cómo puedo configurar mi systemdscript para foo_daemonque, cada vez que un usuario intente detener / reiniciar el servicio, systemdpueda:
- Intenta un apagado elegante de
foo_daemonviaSIGTERM. - Espere hasta 2 segundos para
foo_daemonque se complete el apagado / finalización . - Intente un apagado forzado de
foo_daemonviaSIGKILLsi el proceso todavía está vivo (por lo que no tenemos el riesgo de que el PID sea reciclado y lossystemdproblemasSIGKILLcon el PID incorrecto). El dispositivo que estamos probando genera / bifurca numerosos procesos rápidamente, por lo que existe una preocupación rara pero muy real sobre el reciclaje de PID que causa un problema. - Si, en la práctica, estoy siendo paranoico sobre el reciclaje de PID, estoy de acuerdo con que el script solo emita
SIGKILLcontra el proceso 'PID sin preocuparme por matar un PID reciclado.