Mi sistema incluye una tarea que abre un socket de red, recibe datos enviados de la red, los procesa y los escribe en el disco o hace ping a otras máquinas según los mensajes. Esta tarea debe ejecutarse para siempre, y el servicio está diseñado para que esta tarea siempre se ejecute. Pero a veces se cuelga.Mantenimiento de una tarea de ejecución prolongada en Linux
¿Cuál es la mejor práctica para mantener una tarea así? Supongamos que está bien que la tarea esté muerta durante hasta 30 segundos antes de que la reiniciemos.
Algunas ideas obvias incluyen tener un proceso de vigilancia que comprueba para asegurarse de que el proceso todavía se está ejecutando. Watchdog podría activarse por cron
. Pero, ¿cómo sabe si el proceso está vivo o no? Escribir un archivo pidfile touch
un archivo de latido del corazón? Una solución ideal no generaría continuamente más procesos si la máquina se atasca hasta el punto en que el perro guardián funciona más rápido que el latido del corazón.
¿Hay herramientas estándar de Linux para esto? Me puedo imaginar una solución que utiliza una cola de mensajes, pero no estoy seguro de si es una buena idea o no.
Votar para cambiar al superusuario, unix.se probablemente sea aún mejor. –