У меня была похожая проблема.
Извлечение Рецепт 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 по этому поводу, но сомневаюсь, что это для них приоритет. Может быть, если вы свяжетесь с ними, это изменится.