Upstart script y start-stop-daemon

8

Tuve un problema en el que hacer una secuencia de comandos inicial llamaría a la secuencia de comandos varias veces, haciendo que mi IRCd se reproduzca alrededor de 8 veces más o menos. Para rectificar esto, usé start-stop-daemon:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn

nice -5

exec start-stop-daemon --start --chuid ircuser --chdir /home/ircuser/inspircd/run --exec /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

Esto funciona exactamente como lo quiero, EXCEPTO que:

stop ircd

dice que lo detiene, pero inspircd sigue ejecutándose después.

¿Hay alguna manera mejor que usar start-stop-daemon que evitará que el script abra 8 instancias, o hay alguna forma de hacerlo compatible con start-stop-daemon?

Liam Dawson
fuente

Respuestas:

6

No puedo estar completamente seguro, pero inspircd podría estar bifurcando el camino cuando se ejecuta, por lo que Upstart no sabe dónde está realmente su PID. Si ese es el caso, se puede solucionar porque Upstart tiene dos estrofas para manejar los procesos de bifurcación:

  • expect fork captura procesos que se bifurcan una vez (OMI, lo más probable es el caso aquí).
  • expect daemonatrapa cosas que se desembolsan dos veces ... Lo que esto puede estar haciendo.

Así que prueba esto:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn
expect fork

nice -5

exec su bash -c "cd /home/ircuser/inspircd/run; /home/ircuser/inspircd/run/bin/inspircd -- --config=./conf/inspircd.conf" ircuser

Y si eso no funciona, verifique mi sudeclaración para asegurarse de que funcione desde la línea de comando y luego cambie expect forka expect daemony déle otro giro.


Editar el bashcontenedor podría estar haciéndole más daño que bien. Este podría ser un mejor ejecutivo:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf
Oli
fuente
¡Gracias! Funciona mejor y sí expect forksolucionó el problema. Sin embargo, todavía no puedo llamar 'stop ircd' y detener el script. Sin embargo, me las arreglaré sin él (ps aux, kill), pero si puedes modificar tu respuesta para incluir una forma de hacerlo, seré un usuario de Ubuntu muy feliz;)
Liam Dawson
Hmm: cuando lo ejecutas sudo start ircd, debería generar un PID. Si pegas eso al final de ps(por ejemplo:) ps u -p <PID>¿muestra eso un proceso que tiene sentido? Si no es así, todavía está perdiendo la pista del PID, por lo que es posible que desee probarexpect daemon
Oli
En realidad, no emite un PID, solo una salida de consola. Bueno ps aux, kill <pid>funciona bien, estaba más preocupado por hacer que el script START en el arranque, lo que hace. ¡Gracias!
Liam Dawson