我正在设计一个状态页面,我需要显示延迟的作业是否正在运行。请帮我一个在代码中找到它的方法。
正在使用 Rails 3.0.20, ruby 1.8.7(2011-06-30 patchlevel 352),和 delayed_job 3.0.4
答案 0 :(得分:15)
使用 Rails 5.x ,您可以进入服务器并进入应用内的/ current文件夹并运行:
RAILS_ENV=production bin/delayed_job status
答案 1 :(得分:11)
你可以使用 如果您正在检查生产模式,则RAILS_ENV =生产脚本/ delayed_job状态
答案 2 :(得分:4)
目前,我能够想到确保delayed_job daemon
始终运行的最佳方法是在我们的Rails应用程序中添加initializer
,以检查守护程序是否正在运行。如果它没有运行,那么initializer
会启动daemon
,否则就会离开它。
现在的问题是,我们如何检测Delayed_Job daemon
是否在脚本中运行?
简单方法 -
检查是否存在守护进程PID file
(File.exist?...)。如果它在那里,那么假设它正在运行,否则启动它。
答案 3 :(得分:4)
检查delayed_job是否正在运行的最简单方法是检查locked_by
字段。
此字段将包含锁定/处理作业的工作人员或流程。
如果有作业正在运行,正在运行Delayed::Job.where('locked_by is not null')
会给你一些结果。
除此之外,您还可以执行发条任务来执行此查询,以检查状态。
希望这有帮助。
答案 4 :(得分:2)
要检查作业状态等,您可以使用delayed_job_web gem,其中包含所有已排队的作业。并确保其一直运行安装monit。 Here's轨道广播。 Here's有关如何为delayed_job配置monit的更多信息
答案 5 :(得分:0)
#!/usr/bin/env ruby
pid = ARGV[0].to_i
begin
Process.kill(0, pid)
puts "#{pid} is running"
rescue Errno::EPERM # changed uid
puts "No permission to query #{pid}!";
rescue Errno::ESRCH
puts "#{pid} is NOT running."; # or zombied
rescue
puts "Unable to determine status for #{pid} : #{$!}"
end
检查How can I determine if a different process id is running using Java or JRuby on Linux?