2011-01-20 7 views
29

Qual è il modo migliore per interrompere l'esecuzione di un processo di Unicorn Server? Ogni volta che provo a fermarlo usando kill -p 90234 non funziona. È molto probabile che qualcosa stia sbagliando.Qual è il modo migliore per interrompere l'esecuzione di un processo di Unicorn Server?

Grazie.

+1

Non in programmazione. ServerFault.com forse. – Dogbert

+2

Gettate dei waffle? – bmargulies

+0

ci sono alcune buone operazioni di rake su github che racchiudono le kill calls - https: //gist.github.it/1246503/7fb148968b0195a55b488ae1572c1ded84e15795 – house9

risposta

0

Simple Things There - In Terminal digitare "ps" e dare un'occhiata al Master Unicorn Process. Copia il PID di esso e quindi digita "kill -9 90234" (dove 90234 è PID del processo di unicorno principale). Dopo che quel processo di lavoro dovrebbe scomparire.

+14

'kill -9' non è mai un modo sicuro per uccidere un processo in esecuzione. Suggerisco la risposta di Rob Cameron qui sotto. – Gewthen

+0

Votato. Uccidere con -9 può causare un sacco di problemi, come descritto da Gewthen. kill -QUIT è molto, molto più sicuro (come da risposta di Rob Cameron). – XtraSimplicity

2

Di solito io sono pigro e ho appena uccidere per nome:

$ killall processname 
8

Io probabilmente andare con:

sudo pkill unicorn_rails 
+2

Credo che questa sia la migliore risposta, ho fatto sudo unkorn anche se – jlstr

+0

Questo non va bene se si hanno più server unicorni in esecuzione e si desidera terminarne uno specifico ... – Nick

4
ps aux | grep unicorn 
#=> root 4393 2.0 0.9 65448 20764 ? S 20:06 0:35 unicorn_rails m 
kill 4393 
74

Date un'occhiata al Unicorn SIGNALS page. Se il master si comporta correttamente e si desidera solo di spegnerlo, è necessario inviare un segnale QUIT:

kill -QUIT 1234  # where 1234 is the real process id, of course 

che ferma con grazia tutti i lavoratori, permettendo loro di finire tutte le richieste che sono nel mezzo di servire .

+0

Per terminare il processo corrente: '\' kill -QUIT # {Process.pid} \ '' –

39

Io uso questo:

ps aux | grep 'unicorn' | awk '{print $2}' | xargs sudo kill -9 

Ho appena guardato indietro a questo due mesi più tardi. Questa è follia e non usarla se hai più di un master Unicorn e vuoi solo ucciderne uno.

+1

Funziona perfettamente se hai un milione di lavoratori orfani impiccati – EnabrenTane

0

per coloro che utilizzano chef e vedendo che nessuno dei lavori di cui sopra (perché i processi sono respawned non appena li si uccide):

sudo sv stop APP_NAME

sv è il controllo per runit.

18

Interessante che nessuno ha considerato il file PID creato dall'unicorno? Il mio solito config mette in ./tmp/unicorn.pid, quindi forse il modo più sicuro è

kill -QUIT `cat tmp/unicorn.pid` 

e il file pid viene correttamente eliminato dal processo di partenza. Io metto sempre il file pid nello stesso posto relativo, quindi immagino di poterlo fare alias per comodità, anche se quando sto sviluppando di solito non demone unicorno.

+0

kill -QUIT 'cat shared/pids/unicorn.pid' è un'altra posizione comune per il file PID –

+0

Puoi impostare la posizione del tuo file pid in sviluppo in /config/unicorn/development.rb con: 'pid" tmp/pids/unicorn.pid "'. Quindi '' 'kill -QUIT' cat tmp/pids/unicorn.pid'''' – pdobb

3

In definitiva, la chiave è la seguente riga che si rivolge il processo unicorno master e lo uccide

kill $(ps aux | grep '[u]nicorn_rails master' | awk '{print $2}') 
0

Per uscire da uno specifico server Unicorn si può usare qualcosa di simile a quanto segue:

pkill -QUIT --pidfile /path/to/app/shared/tmp/pids/unicorn.pid 

Questo modo in cui puoi uccidere selettivamente qualsiasi processo e non devi usare la valutazione/espansione della shell che potrebbe non essere disponibile.

Problemi correlati