Script Upstart et start-stop-daemon

J’ai eu un problème où faire un script upstart l’appellerait plusieurs fois, ce qui ferait apparaître mon IRCd environ 8 fois. Afin de remédier à cela, j’ai utilisé 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 

Cela fonctionne exactement comme je le veux, SAUF que:

 stop ircd 

dit que cela l’arrête, mais inspircd est toujours en cours d’exécution par la suite.

Existe-t-il un meilleur moyen que d’utiliser start-stop-daemon pour empêcher le script d’ouvrir 8 instances ou existe-t-il un moyen de le rendre compatible avec le démon start-stop?

Je ne peux pas en être tout à fait sûr, mais Inspircd pourrait bien tracer le chemin quand il est exécuté, donc Upstart ne sait pas où se trouve réellement son PID. Si c’est le cas, cela peut être corrigé car Upstart a deux strophes pour gérer les processus de forking:

  • expect fork que les processus fork qui ne se lancent qu’une fois (imo, probablement le cas ici).
  • expect daemon attrape des choses qui débordent deux fois … Ce que cela peut être fait.

Alors essayez 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érifiez mes instructions pour vous assurer qu’il fonctionne à partir de la ligne de commande, puis modifiez les informations expect fork et expect daemon et donnez-lui un autre tourbillon.


Modifier l’emballage de bash pourrait faire plus de mal que de bien. Cela pourrait être un meilleur exec:

 exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf