检查Rails中延迟任务是否正在运行

17

我正在设计一个状态页面,需要显示延迟作业是否正在运行。请帮我找到在代码中查找它的方法。

我使用的技术包括: Rails 3.0.20, ruby 1.8.7(2011-06-30修补程序级别352)以及 delayed_job 3.0.4。

6个回答

23

使用 Rails 5.x,您可以通过SSH连接到服务器,并进入应用程序中的 /current 文件夹,然后运行:

RAILS_ENV=production bin/delayed_job status

1
在我的Rails 4项目中,命令是RAILS_ENV=production script/delayed_job status - bayfieldcoder
@bayfieldcoder,你把那个项目从Rails 3升级了吗? - pastullo
是的,我已经将它从Rails 3升级了。 - bayfieldcoder

14

您可以使用

RAILS_ENV=production script/delayed_job status 

如果您正在检查生产模式


9
检查 delayed_job 是否正在运行的最简单方法是检查 locked_by 字段。
该字段将包含锁定/处理作业的工作程序或进程。
运行Delayed::Job.where('locked_by is not null')将为您提供一些结果(如果有作业在运行)。
除此之外,您可以拥有一个clockwork任务执行此查询,以检查状态。
希望这能帮到您。

4
目前,我能想到的确保delayed_job daemon始终运行的最佳方式是向我们的Rails应用程序添加一个initializer,以检查守护程序是否正在运行。如果没有运行,则initializer将启动daemon,否则,它将保持不变。
现在的问题是如何从脚本内部检测Delayed_Job daemon是否正在运行?
简单方法:
检查守护进程的PID文件是否存在(File.exist?…)。如果存在,则假定它正在运行,否则启动它。

我正在使用EC2和DJ(Active record)进行工作。我正在使用'mina'进行部署。在启动它之前,如何检查DJ是否正在运行。问题是每次部署时都会启动多个DJ进程。 - Prasad Surase
如何在脚本中启动工作进程?脚本/延迟任务是否会重启工作进程? - Yujun Wu

2
为了检查工作状态等信息,您可以使用delayed_job_web gem,该gem会列出所有排队的工作。 为了确保其始终运行,请安装monit。这里是railscast。这里有更多关于如何为delayed_job配置monit的信息。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接