Pregunta

Este post describe cómo mantener un proceso hijo viva en un script bash:

Cómo Cómo puedo escribir un script bash para reiniciar un proceso si muere?

Esto funcionó muy bien para llamar a otro script BASH.

Sin embargo, he intentado ejecutar algo similar en el que el proceso hijo es un script en Python, daemon.py que crea un proceso hijo bifurcado que se ejecuta en segundo plano:

#!/bin/bash

PYTHON=/usr/bin/python2.6

function myprocess {


$PYTHON daemon.py start

}
NOW=$(date +"%b-%d-%y")

until myprocess; do
     echo "$NOW Prog crashed. Restarting..." >> error.txt
     sleep 1
done

Ahora, el comportamiento es completamente diferente. Parece que el script en Python, ya no es un niño de la escritura del golpe, pero parece tener 'tomados' las secuencias de comandos BASH PID - lo que ya no es una envoltura alrededor de la BASH script llamado ... ¿por qué

¿Fue útil?

Solución

Un proceso demonio dobles horquillas, como el punto clave de daemonizing sí - por lo que el PID que el padre-proceso tiene no es de valor (que se ha ido muy pronto después de que el proceso hijo comenzó).

Por lo tanto, un proceso de demonio debe escribir su PID a un archivo en un "lugar conocido", donde, por convención, el proceso padre sabe dónde leyó a partir; con este enfoque (tradicional), el proceso padre, si quiere actuar como un organismo de control de reiniciar, simplemente puede leer el PID del proceso demonio de la ubicación conocida y comprobar periódicamente si el demonio está todavía vivo, y reiniciarlo cuando sea necesario.

Se necesita un cierto cuidado en la ejecución, por supuesto (un "rancio" PID se quedará en el archivo "lugar bien conocido" por un tiempo y los padres deben tener esto en cuenta), y hay variantes posibles (el demonio podría emitirá un "latido" de modo que los padres pueden detectar no sólo los demonios muertos, sino también los que son "atrapado para siempre", por ejemplo, debido a un callejón sin salida, ya que dejan de dar su "latido" [[a través de difusión UDP o similares]] -., etc, etc), pero esa es la idea general

Otros consejos

Se debe mirar a la propuesta de mejora del pitón 3143 (PEP) aquí . En ella Ben sugiere que se incluya una biblioteca demonio en el pitón lib estándar. Se acerca un montón de muy buena información acerca de los demonios y es una lectura bastante fácil. La implementación de referencia es aquí .

Parece que el comportamiento es completamente diferente porque aquí el "daemon.py" se puso en marcha en el fondo como un demonio.

En el otro enlace que señaló que el proceso que se inspeccionó es no un demonio, no se inicia en el fondo. El lanzador simplemente esperar siempre que el tope proceso hijo.

Hay varias maneras de superar esto. La clásica es la forma @Alex explicar, utilizando algún archivo pid en lugares convencionales.

Otra forma podría ser la construcción de la vigilancia dentro de su demonio que se ejecuta en demonio y el perro guardián ... esto podría simular un proceso correcto que no se rompen al azar (algo que no debería ocurrir) ...

Hacer uso de ' https://github.com/ut0mt8/simple-ha '.

  

sencilla-ha

     

¿Cansado de keepalived, corosync, marcapasos, latido del corazón o lo que sea? Aquí un demonio sencilla Wich asegurar un latido del corazón entre dos hosts. Uno de ellos es activo, y la otra es la copia de seguridad, el lanzamiento de la escritura cuando se cambia el estado. implementación simple, KISS. Listos para la producción (al menos a mí me funciona:)

La vida será demasiado fácil!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top