Upstart script e start-stop-daemon


8

Ho avuto un problema per cui la creazione di uno script upstart avrebbe richiamato lo script più volte, causando la generazione dell'IRCd circa 8 volte. Per correggere questo, ho usato 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

Funziona esattamente come lo voglio io, TRANNE che:

stop ircd

dice che lo ferma, ma inspircd è ancora in esecuzione dopo.

C'è un modo migliore dell'utilizzo di start-stop-daemon che impedirà allo script di aprire 8 istanze o c'è un modo per renderlo compatibile con il demone start-stop?

Risposte:


6

Non posso essere del tutto sicuro, ma inspircd potrebbe aprirsi la strada quando viene eseguito, quindi Upstart non sa dove sia realmente il suo PID. In tal caso, può essere risolto perché Upstart ha due stanze per la gestione dei processi di fork:

  • expect fork rileva i processi che si biforcano una volta (imo, molto probabilmente il caso qui).
  • expect daemonsorprende cose che sborsano due volte ... Cosa che potrebbe fare.

Quindi prova questo:

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

E se non funziona, controlla il mio su-statement per assicurarti che funzioni dalla riga di comando e poi cambia expect forkin expect daemone fai un altro giro rapido.


Modifica il bashwrapper potrebbe fargli più male che bene. Questo potrebbe essere un dirigente migliore:

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

Grazie! Funziona in modo più accurato e sì expect forkrisolto il problema. Tuttavia, non riesco ancora a chiamare "stop ircd" e interrompere lo script. Tuttavia, ci riuscirò senza (ps aux, kill), ma se puoi modificare la tua risposta per includere un modo per farlo, sarò un utente Ubuntu molto felice;)
Liam Dawson il

Hmm - quando lo esegui sudo start ircddovrebbe emettere un PID. Se lo attacchi alla fine di ps(ad es . ps u -p <PID>:) mostra un processo che ha senso? In caso contrario, sta ancora perdendo la traccia del PID, quindi potresti provareexpect daemon
Oli

In realtà, non genera un PID, ma solo un output della console. Vabbè, ps aux, kill <pid>funziona bene, ero più preoccupato per rendere lo script di avvio al boot, cosa che fa. Grazie!
Liam Dawson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.