如果我使用-m“monitor”选项运行delayed_job,该怎么办?这些过程不断重启!
我启动delayed_job的命令是:
script/delayed_job -n 4 -m start
-m运行监视器进程,如果有人死亡,则会生成一个新的delayed_job进程。
我用来停止的命令是:
script/delayed_job stop
但这并没有停止监控进程,进而再次启动所有进程。我希望他们离开。我可以杀死它们,但是我希望有一些命令行选项来关闭整个事情。
答案 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
避免任何可能阻止部署脚本的错误:
我只杀死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