【问题标题】:Rails delayed jobs stops on stagingRails 延迟作业在暂存时停止
【发布时间】:2016-12-20 20:27:01
【问题描述】:
如何确定延迟作业是否在后台运行。如果它停止,那么它应该通过检查一些进程 pid 或其他东西开始运行。我的问题是有时会延迟作业停止,我无法弄清楚它为什么会发生所以任何人都可以告诉我我应该怎么做才能解决这个问题。
这是我检查状态的命令
RAILS_ENV=staging ./script/delayed_job status
但我需要做一些事情来自动检查延迟的作业是否正在运行。如果不是它应该开始运行
【问题讨论】:
-
IMO 监视和启动外部进程不是应用程序的责任。我建议使用 monitoring tool 像 god 或 bluepill 来监控所有需要的进程是否已启动并运行。
标签:
ruby
linux
ruby-on-rails-4
ruby-on-rails-5
delayed-job
【解决方案1】:
在根目录下创建一个shell脚本文件,并放置这段代码。
然后给文件权限
ps_out=`ps -ef | grep delayed | grep -v 'grep' | grep -v $0`
result=$(echo $ps_out | grep "$1")
if [[ "$result" != "" ]];then
echo "Running"
else
/path-to-your-project/delayed_job start
fi
现在在 crontab 中添加这个
crontab -e
【解决方案2】:
要监视进程是否正在运行(并可选择重新启动它),请使用 god 之类的内容。
如果您的后台作业即将结束,您应该增加日志详细程度,并可能使用远程异常通知器,例如 Airbrake。
两者都有几十种选择,请自行研究。
要手动检查是否有进程在运行,请使用
> ps aux
或 top 或 htop 列出现有进程。