Script Upstart et démon start-stop

8

J'ai eu un problème où faire un script parvenu à l'appel appelait le script plusieurs fois, provoquant l'apparition de mon IRCd environ 8 fois. Afin de rectifier cela, j'ai utilisé le démon start-stop:

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

Cela fonctionne exactement comme je le veux, SAUF que:

stop ircd

dit qu'il l'arrête, mais inspircd fonctionne toujours après.

Existe-t-il un meilleur moyen que d'utiliser start-stop-daemon qui empêchera le script d'ouvrir 8 instances, ou existe-t-il un moyen de le rendre compatible avec le start-stop-daemon?

Liam Dawson
la source

Réponses:

6

Je ne peux pas être tout à fait sûr, mais inspircd pourrait être en train de bifurquer quand il est exécuté, donc Upstart ne sait pas où est vraiment son PID. Si tel est le cas, cela peut être corrigé car Upstart a deux strophes pour gérer les processus de bifurcation:

  • expect fork capture les processus qui se produisent une fois (imo, très probablement le cas ici).
  • expect daemonattrape des choses qui débordent deux fois ... Ce que cela peut faire.

Essayez donc ceci:

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

Et si cela ne fonctionne pas, vérifier mon su-Déclaration pour vous assurer qu'il fonctionne à partir de la ligne de commande, puis changer expect forkpour expect daemonet lui donner une autre tourbillon.


Modifier le bashwrapper pourrait lui faire plus de mal que de bien. Cela pourrait être un meilleur exécutable:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf
Oli
la source
Je vous remercie! Cela fonctionne plus proprement, et oui a expect forkrésolu le problème. Cependant, je ne peux toujours pas appeler «stop ircd» et faire arrêter le script. Cependant, je vais m'en passer (ps aux, tuer), mais si vous pouvez modifier votre réponse pour inclure un moyen de le faire, je serai un utilisateur Ubuntu très heureux;)
Liam Dawson
Hmm - lorsque vous l'exécutez, sudo start ircdil devrait sortir un PID. Si vous collez cela à la fin ps(par exemple ps u -p <PID>:), cela montre-t-il un processus qui a du sens? Si ce n'est pas le cas, il perd toujours la trace du PID, alors vous voudrez peut-être essayerexpect daemon
Oli
En fait, il ne produit pas de PID, juste une sortie de console. Eh bien, ps aux, kill <pid>fonctionne très bien, je plus préoccupé de faire au démarrage du script de démarrage, ce qu'il fait. Merci!
Liam Dawson