我最近在after_restart阶段添加了delayed_job说唱。像这样:
system "script/delayed_job stop"
system "script/delayed_job start -n 3"
大部分都有效。直到今天我遇到了一点障碍。我发现即使在我重复并手动执行script/delayed_job stop
之后,delayed_job的实例仍在运行。
我仍然明白这一点:
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
,但这不是 overkill 吗?而且,我将如何动态实现它?
答案 0 :(得分:1)
我遇到了类似的问题。
使用start和stop命令查看Engine Yard's delayed_job recipe,特别是its template。它在您的Engine Yard实例上使用/engineyard/bin/dj
处的脚本。
<% (@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 %>
当调用stop脚本时,它首先使用kill -15
(TERM),等待一个默认为60秒的宽限期,如果它仍然存在,则使用kill -9
。
如果您以后可以减少维护,请使用Engine Yard的脚本(以及配方)。但如果它不适合您,您可以将脚本基于这些概念。我在升级到Rails 3时遇到了一些问题,因此它可能适用于您,也可能不适合您。我刚刚联系了Engine Yard,但我怀疑这对他们来说是一个高优先级。也许如果你也联系他们,那将会改变。