linux rhel upstart

linux - ¿Se puede usar el inicio/expectativa/regeneración en procesos que se dividen más de dos veces?



rhel upstart (1)

Estoy usando upstart para iniciar / detener / reiniciar automáticamente los demonios. Uno de los demonios se bifurca 4 veces. El recetario de cocina dice que solo soporta forking dos veces. ¿Hay una solución?

Como falla

Si trato de usar expect daemon o expect fork , upstart usa el pid de la segunda fork. Cuando trato de detener el trabajo, nadie responde a la señal SIGKILL ascendente y se cuelga hasta que se agota el espacio pid y se da la vuelta. Se pone peor si agregas reaparición. Upstart piensa que el trabajo murió e inmediatamente comienza otro.

Error reconocido por upstream

Se ha introducido un error para upstart. Las soluciones presentadas se ajustan al antiguo sysvinit, reescriben su daemon o esperan una reescritura. RHEL lleva casi 2 años de retraso con respecto al último paquete de inicio, por lo que cuando se publique la reescritura y nos actualicemos, la espera probablemente será de 4 años. El daemon está escrito por un subcontratista de un subcontratista de un contratista, por lo que tampoco será reparado en el corto plazo.


Se me ocurrió un truco feo para hacer que esto funcione. Funciona para mi aplicación en mi sistema. YMMV.

  1. iniciar la aplicación en la sección de preinicio
  2. en la sección de secuencias de comandos, ejecute una secuencia de comandos que se ejecute mientras se ejecute la aplicación. El pid de este script es lo que hará el inicio.
  3. en la sección posterior a la parada mata la aplicación

ejemplo

env DAEMON=/usr/bin/forky-application pre-start script su -s /bin/sh -c "$DAEMON" joeuseraccount end script script sleepWhileAppIsUp(){ while pidof $1 >/dev/null; do sleep 1 done } sleepWhileAppIsUp $DAEMON end script post-stop script if pidof $DAEMON; then kill `pidof $DAEMON` #pkill $DAEMON # post-stop process (19300) terminated with status 1 fi end script

un enfoque similar podría ser tomado con archivos pid.