尽管我不断谋杀,Delayed_Job也不会死

时间:2011-12-07 14:37:38

标签: ruby-on-rails delayed-job engineyard

我最近在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 吗?而且,我将如何动态实现它?

1 个答案:

答案 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,但我怀疑这对他们来说是一个高优先级。也许如果你也联系他们,那将会改变。