2011-01-20 14 views
29

¿Cuál es la mejor manera de evitar que se ejecute un proceso de Unicorn Server? Cada vez que trato de detenerlo usando kill -p 90234, no funciona. Es muy probable que sea algo que estoy haciendo mal.¿Cuál es la mejor manera de detener la ejecución de un proceso de Unicorn Server?

Gracias.

+1

No programando. ServerFault.com tal vez. – Dogbert

+2

¿Lanzar gofres en él? – bmargulies

+0

hay algunas buenas tareas de rake en github que envuelven las llamadas a muerte - https: //gist.github.com/1246503/7fb148968b0195a55b488ae1572c1ded84e15795 – house9

Respuesta

0

Cosas simples allí - en el terminal, escriba "ps" y busque el proceso de unicornio maestro. Copie el PID y luego escriba "kill -9 90234" (donde 90234 es PID del proceso maestro de unicornio). Después de ese proceso de trabajo debería desaparecer a sí mismo.

+14

'kill -9' nunca es una forma segura de matar un proceso en ejecución. Sugiero la respuesta de Rob Cameron a continuación. – Gewthen

+0

Votado abajo. Matar con -9 puede causar un montón de problemas, como Gewthen describió. kill -QUIT es mucho, mucho más seguro (según la respuesta de Rob Cameron). – XtraSimplicity

2

Por lo general soy vago y acabo de matar por su nombre:

$ killall processname 
8

probablemente me iría con:

sudo pkill unicorn_rails 
+2

Creo que esta es la mejor respuesta, hice sudo unicornio pkill aunque – jlstr

+0

Esto no es bueno si tienes varios servidores de unicornio ejecutándose y solo quieres terminar uno específico ... – 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

Tener un vistazo a la Unicorn SIGNALS page. Si el maestro está comportando correctamente y lo que desea para apagarlo, debe enviar una señal QUIT:

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

que se detiene con gracia a todos los trabajadores, déjelos que terminen todas las solicitudes que están en el medio de servir .

+0

Para matar el proceso actual: '\' matar -QUIT # {Process.pid} \ '' –

39

Yo uso este:

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

acabo volvió a mirar a esta dos meses más tarde. Esto es una locura, y no uses esto si tienes más de un maestro Unicornio y solo quieres matar a uno de ellos.

+1

Esto funciona muy bien si tiene un millón de trabajadores huérfanos colgando – EnabrenTane

0

para aquellos que utilizan chef y ver que ninguno de los trabajos anteriores (debido a que los procesos se regeneran tan pronto como los matas):

sudo sv stop APP_NAME

sv es el control de runit.

18

¿Interesante que nadie considera el archivo pid que crea el unicornio? Mi configuración habitual pone en ./tmp/unicorn.pid, así que quizás la forma más segura es

kill -QUIT `cat tmp/unicorn.pid` 

y el archivo pid continuación, se elimina correctamente por el proceso de salida. Siempre puse el archivo pid en el mismo lugar relativo, así que supongo que podría alias por conveniencia, aunque cuando estoy desarrollando no suelo demonizar al unicornio.

+0

kill -QUIT 'cat shared/pids/unicorn.pid' es otra ubicación común para el archivo PID –

+0

Puede establecer la ubicación de su archivo pid en desarrollo en /config/unicorn/development.rb con: 'pid" tmp/pids/unicorn.pid "'. Luego '' 'kill -QUIT' cat tmp/pids/unicorn.pid'''' – pdobb

3

En última instancia, la clave es la siguiente línea que se enfoca en el proceso de unicornio maestro y lo mata

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

Para salir de un servidor unicornio específica se puede usar algo como lo siguiente:

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

Este forma en que puede matar selectivamente cualquier proceso y no tiene que usar evaluación/expansión de shell que puede no estar disponible.

Cuestiones relacionadas