2011-01-20 4 views
29

Каков наилучший способ остановить процесс Unicorn Server? Всякий раз, когда я пытаюсь остановить его, используя kill -p 90234, он не работает. Скорее всего, я что-то делаю неправильно.Каков наилучший способ остановить процесс Unicorn Server?

Спасибо.

+1

Не программирование. Возможно, ServerFault.com. – Dogbert

+2

Бросьте вафли на это? – bmargulies

+0

есть хорошие рейк-задачи на github, которые обертывают вызовы kill - https: //gist.github.com/1246503/7fb148968b0195a55b488ae1572c1ded84e15795 – house9

ответ

0

Простые вещи там - в терминале типа «ps» и посмотрите на процесс мастер-единорога. Скопируйте PID, а затем введите «kill -9 90234» (где 90234 - это PID ведущего единорога). После этого рабочий процесс должен исчезнуть сам.

+14

'kill -9' никогда не является надежным способом убить запущенный процесс. Я предлагаю Роба Камерона ответить ниже. – Gewthen

+0

Проголосовали. Убийство с помощью -9 может вызвать кучу проблем, как описал Gewthen. kill -QUIT намного безопаснее (по словам Роба Камерона). – XtraSimplicity

2

Обычно я ленивый, и я просто убить по имени:

$ killall processname 
8

я бы, вероятно, пойти с:

sudo pkill unicorn_rails 
+2

Я считаю, что это лучший ответ, я сделал sudo pkill unicorn, хотя – jlstr

+0

Это нехорошо, если вы используете несколько серверов единорога, и вы хотите только закончить конкретный ... – 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

Посмотрите на Unicorn SIGNALS page. Если мастер правильно вести себя, и вы просто хотите, чтобы отключить его, вы должны послать сигнал QUIT:

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

Это грациозно останавливает всех рабочих, позволяя им закончить любые запросы, они находятся в центре обслуживания ,

+0

Чтобы убить текущий процесс: '\' kill -QUIT # {Process.pid} \ '' –

39

Я использую это:

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

Я просто посмотрел на это через два месяца. Это безумие и не используйте это, если у вас есть более одного мастера Единорога, и вы хотите убить одного из них.

+1

Это отлично работает, если у вас есть миллион висячих сиротских работников – EnabrenTane

0

для тех, кто использует повара и не видя, что ни один из перечисленных выше работ (поскольку процессы respawned как только вы их убьете):

sudo sv stop APP_NAME

sv является контроль за runit.

18

Интересно, что никто не считал файл pid, который создает единорог? Мой обычный конфиг помещает его в ./tmp/unicorn.pid, поэтому, возможно, самый безопасный способ

kill -QUIT `cat tmp/unicorn.pid` 

и файл ПИД- затем правильно удален процесс вылетающих. Я всегда помещал файл pid в одно и то же относительное место, поэтому, я думаю, я мог бы использовать его для удобства, хотя, когда я занимаюсь разработкой, я обычно не осуждаю единорога.

+0

kill -QUIT 'cat shared/pids/unicorn.pid' - еще одно общее место для файла PID –

+0

Может установить местоположение вашего файла pid в разработке в /config/unicorn/development.rb с помощью: 'pid 'tmp/pids/unicorn.pid". Затем '' 'kill -QUIT' cat tmp/pids/unicorn.pid'''' – pdobb

3

В конечном счете, ключ является следующей строкой, которая нацелена на единорог процесс мастера и убивает его

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

Для выхода конкретного Unicorn сервера вы можете использовать что-то вроде следующего:

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

Этих вы можете выборочно убить любой процесс, и вам не нужно использовать оценку/расширение оболочки, которая может быть недоступна.

Смежные вопросы