2012-02-19 16 views
7

Sto usando upstart per creare un daemon per uno script di nginx python freqgi generato. Se uso il seguito funziona:Utilizzo di ubuntu upstart per arrestare un daemon

sudo start myserver 

Che cosa non funziona è:

sudo stop myserver 
stop: Unknown instance: 

Qui di seguito è il mio file di configurazione con il comando di blocco del processo. Suppongo che il comando per uccidere hte proccess sia in uno script di pre-arresto?

#!upstart 
description "myserver" 
author  "Test" 

start on startup 
stop on shutdown 
respawn 
#instance 

script 
    export HOME="/root" 

    echo $$ > /var/run/myerver.pid 
    exec spawn-fcgi -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 
end script 

pre-start script 
    # Date format same as (new Date()).toISOString() for consistency 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/myserver.sys.log 
end script 

pre-stop script 
    rm /var/run/myserver.pid 
    sudo kill `sudo lsof -t -i:9001` 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/myserver.sys.log 
end script 
+0

* domande Nix vengono spostati a [superuser.com] (http://superuser.com/) –

risposta

8

Il modo migliore per gestire questa situazione sarebbe quello di dire a deporre le uova-fcgi per l'esecuzione in primo piano, e non eseguito come demone. La pagina man di spawn-fcgi dice che l'opzione -n fa questo. Poi si può riscrivere tutto questo lavoro parvenu come questo:

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

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 

Si noti che con Upstart 1.4 che non hanno nemmeno bisogno di direzione di registro, come il valore predefinito è 'log della console', che avrebbero avuto tutto l'output in/var/log/parvenu/$ UPSTART_JOB.log .. quindi ITW ould essere solo

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

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 

vale la pena notare che questo viene eseguito come root, ma si mette in ascolto sulla porta 9001. quindi, si sarebbe probabilmente meglio a correre come nessuno . Con Upstart 1.5 (Ubuntu 12.04 e poi di nuovo) Basta aggiungere questo:

setuid nobody 
setgid nogroup 

(Potrebbe essere necessario cambiare nessuno/nogroup per ubuntu/ubuntu in quanto i file sono in/home/ubuntu)

noti inoltre che start on startup non funzioni in modo affidabile, perché l'evento startup si verifica prima che i file system vengano montati e prima che la rete sia attiva. Anche start on shutdown semplicemente non funziona, in quanto non è un vero evento. Vedi man upstart-events per altri eventi.

+0

Penso che si possa farlo funzionare in modo affidabile se si modifica la riga 'start' un po 'per iniziare (filesystem e net-device-up IFACE = lo) o runlevel [2345] ' –

+1

Cosa succede se il processo non può essere brough t in primo piano? Ho 2 comandi, phpbrew fpm start e phpbrew fpm stop. Voglio solo l'avvio del servizio e l'interruzione del servizio per tradurre rispettivamente questi 2 comandi. Come lo posso fare? – CMCDragonkai

2

Credo che il tuo pre-arresto stia fermando il tuo server, quindi quando Upstart cerca di fermare il tuo server non c'è nessun processo in esecuzione da fermare e ti dà quell'errore.

Problemi correlati