如果我使用-m“monitor”选项运行,如何停止delayed_job?

时间:2011-10-13 19:38:58

标签: ruby-on-rails delayed-job

如果我使用-m“monitor”选项运行delayed_job,该怎么办?这些过程不断重启!

我启动delayed_job的命令是:

script/delayed_job -n 4 -m start

-m运行监视器进程,如果有人死亡,则会生成一个新的delayed_job进程。

我用来停止的命令是:

script/delayed_job stop

但这并没有停止监控进程,进而再次启动所有进程。我希望他们离开。我可以杀死它们,但是我希望有一些命令行选项来关闭整个事情。

4 个答案:

答案 0 :(得分:8)

在我的capistrano部署脚本中,我有这个:

desc "Start workers"
task :start_workers do
  run "cd #{release_path} && RAILS_ENV=production script/delayed_job -m -n 2 start"
end

desc "Stop workers"
task :stop_workers do
  run "ps xu | grep delayed_job | grep monitor | grep -v grep | awk '{print $2}' | xargs -r kill"
  run "cd #{current_path} && RAILS_ENV=production script/delayed_job stop"
end

避免任何可能阻止部署脚本的错误:

  • “ps xu”仅显示当前用户拥有的进程
  • “xargs -r kill”仅在有杀人事件时调用kill命令

我只杀死delayed_job监视器,并以正常方式停止delayed_job守护程序。

答案 1 :(得分:4)

我有同样的问题。这就是我解决它的方法:

# ps -ef | grep delay
root      8605     1  0 Jan03 ?        00:00:00 delayed_job_monitor                               
root     15704     1  0 14:29 ?        00:00:00 dashboard/delayed_job                             
root     15817 12026  0 14:31 pts/0    00:00:00 grep --color=auto delay

您在此处看到delayed_job进程监视器。接下来,我将手动终止这些进程,然后删除PID。从应用程序的目录(在我的例子中是/ usr / share / puppet-dashboard):

# ps -ef | grep delay | grep -v grep | awk '{print $2}' | xargs kill && rm tmp/pids/*

答案 2 :(得分:1)

直接的答案是你必须先杀掉监控程序。然而,AFAIK没有一种简单的方法可以做到这一点,我不认为监视器PID存储在任何地方,并且DJ开始和停止脚本肯定不会在那里做任何智能,正如你所注意到的那样。

我觉得奇怪的是显示器功能已经包含在内 - 我猜Daemons有它,所以无论是谁写的DJ脚本都认为他们只会将该选项传递下去。但它并不是真的可用。

前一段时间我写了一封关于此列表的电子邮件,没有得到答案:https://groups.google.com/d/msg/delayed_job/HerSuU97BOc/n4Ps430AI1UJ

您可以在此处查看有关使用守护程序进行监控的更多信息:http://daemons.rubyforge.org/classes/Daemons.html#M000004

如果您想出更好的答案/解决方案,请在此处将其添加到维基:https://github.com/collectiveidea/delayed_job/wiki/monitor-process

答案 3 :(得分:0)

如果可以访问服务器,则可以尝试以下命令:

~$ python3 test.py
Enter a name: Qui Quill Quiana
クイ.クィル.キアナ

OR

ps -ef | grep delayed_job
kill -9 XXXX #xxxx is process id

您也可以在config / deploy.rb中将此脚本添加到capistrano3

cd path-to-app-folder/current
RAILS_ENV=production bin/delay_job stop
RAILS_ENV=production bin/delay_job start

然后运行 上限

namespace :jobworker do
 task :start do
    on roles(:all) do
      within "#{current_path}" do
        with rails_env: "#{fetch(:stage)}" do
          execute "bin/delayed_job start"
        end
      end
    end
  end
 task :stop do
    on roles(:all) do
      within "#{current_path}" do
        with rails_env: "#{fetch(:stage)}" do
          execute "bin/delayed_job stop"
        end
      end
    end
  end
end