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 ...
- ... debe verificar la
WATCHDOG_USEC
variable de entorno;
- ... debe llamar a sd_notify () de forma continua y frecuente, a lo largo de su vida útil, con la
WATCHDOG=1
opción establecida, en un intervalo de aproximadamente WATCHDOG_USEC
/ 2 ("USEC" significa microsegundos);
- ... debe haber
Type=notify
establecido en su archivo de unidad;
- ... debería tener
NotifyAccess=main
(o =all
) establecido en su archivo de unidad;
- ... debe tener
WatchdogSec=
segundos establecidos en su archivo de unidad.
- ... debe vincularse con
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
for(;;) do_something();
?