Delayed_Job не умрет, несмотря на мое непрекращающееся убийство - PullRequest
1 голос
/ 07 декабря 2011

Я недавно добавил рэп delayed_job к моей фазе after_restart. Вот так:

system "script/delayed_job stop"
system "script/delayed_job start -n 3"

Который работает по большей части. Пока я не столкнулся с небольшой загадкой сегодня. Я обнаружил, что экземпляр delayed_job все еще работает даже после того, как я несколько раз вручную и сделал script/delayed_job stop.

Я все еще получаю это:

user@ip-10-126-6-125 /data/HQ_Channel2/current $ ps aux | grep del
user   11034  0.0  3.4  74016 61964 ?        S    Dec05   0:19 delayed_job.0                     
user   11036  0.0  3.5  73660 63516 ?        S    Dec05   0:21 delayed_job.1                     
user   11038  0.0  3.6  73980 65256 ?        S    Dec05   0:17 delayed_job.2

Неправильно ли мне пытаться закрыть это через script/delayed_job stop?

Единственный другой способ, которым я знаю, как это убить - это kill -9, но разве это не перебор ? И более того, как бы я это реализовал динамически?

1 Ответ

1 голос
/ 05 февраля 2012

У меня была похожая проблема.

Извлечение Рецепт delayed_job Engine Yard , в частности его шаблон с командами запуска и останова. Он использует скрипт на /engineyard/bin/dj на вашем экземпляре Engine Yard.

<% (@num_workers || 1).times do |num| %>
  check process <%= @worker_name %>_<%= num %>
    with pidfile /var/run/engineyard/dj/<%= @app_name %>/dj_<%= @worker_name %>.pid
    start program = "/engineyard/bin/dj <%= @app_name %> start <%= @framework_env %> <%= @worker_name %>" with timeout 60 seconds
    stop program = "/engineyard/bin/dj <%= @app_name %> stop <%= @framework_env %> <%= @worker_name %>" with timeout 60 seconds
    if totalmem is greater than 300 MB then restart # eating up memory?
    group dj_<%= @app_name %>
<% end %>

Когда вызывается скрипт остановки, он сначала использует kill -15 (TERM), ожидает льготный период по умолчанию, равный 60 секундам, и, если он все еще жив, тогда использует kill -9.

Используйте сценарий Engine Yard (и, если на то пошло, рецепт), если сможете сократить обслуживание позже. Но если это не работает для вас, вы можете основывать свой сценарий на этих понятиях. У меня были некоторые проблемы с обновлением до Rails 3, поэтому он может или не может работать для вас. Я только что связался с Engine Yard по этому поводу, но сомневаюсь, что это для них приоритет. Может быть, если вы свяжетесь с ними, это изменится.

...