Mientras trabajaba en una solución que utiliza el bloqueo de archivos, creo que mi código está llegando a un punto muerto. Estoy usando systemd para iniciar el proceso en el inicio del sistema. Usar la alarma (3) es una opción, pero me preguntaba si systemd puede detectar procesos bloqueados y reiniciarlos.
Actualmente, para evitar este problema por ahora, estoy planeando mirar la salida de journalctl y si no cambia durante un período de tiempo específico, entonces mataría el proceso a través de un script de shell.
Solo me pregunto si hay una mejor manera de monitorear los procesos a través de systemd o de otra manera.
monitoring
systemd
pensador libre
fuente
fuente
for(;;) do_something();
?Respuestas:
Si; pero primero arregle su programa defectuoso antes de jugar con systemd.
MariusMatutiae es bastante correcto. Tienes un problema con tu programa. Se estanca. Jugar con systemd no es la respuesta. En el mejor de los casos, es una distracción. Arregle su programa para que no se rompa. Dirige tus energías hacia lo correcto.
Dicho esto, otras personas van a venir aquí por el título de la pregunta, en lugar de la pregunta propiamente dicha. Para su beneficio, aquí está la respuesta al título, ignorando la pregunta correcta:
Sí, systemd puede monitorear demonios y reiniciarlos automáticamente si dejan de hablar. Sin embargo, no cualquier viejo demonio. Como señala mvp, no hay forma de saber que un demonio ha colgado (en este universo, donde el problema de detención es indecidible, al menos). Ni systemd ni ningún otro programa de computadora serán capaces de deducir desde cero que algún programa aleatorio lanzado a ellos se ha estancado, o ha entrado en un bucle infinito, o lo que sea. Lo mejor que obtendrá aquí es detectar que un demonio no ha realizado una operación regular de "latido" dentro de un intervalo de tiempo requerido.
Los demonios que aprovechan las capacidades de vigilancia del sistema, por lo tanto, tienen que escribirse para hablar un protocolo específico del sistema, el protocolo sd_notify. Esto complica el código del demonio un poco. Es complicado aún más porque los demonios deberían, si están escritos correctamente, verificar si también han sido invocados con la función de vigilancia habilitada.
Un demonio que habla este protocolo para hacer uso de la capacidad de vigilancia del sistema ...
WATCHDOG_USEC
variable de entorno;WATCHDOG=1
opción establecida, en un intervalo de aproximadamenteWATCHDOG_USEC
/ 2 ("USEC" significa microsegundos);Type=notify
establecido en su archivo de unidad;NotifyAccess=main
(o=all
) establecido en su archivo de unidad;WatchdogSec=
segundos establecidos en su archivo de unidad.libsystemd-daemon.so
Si desea conocer los detalles de la codificación, después de leer el manual, asegúrese de ir al StackExchange correcto. Este es SuperUser. StackOverflow está por allí .
Otras lecturas
fuente