检查延迟作业是否在rails中运行

时间:2013-02-14 08:34:39

标签: ruby-on-rails ruby-on-rails-3 delayed-job

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

正在使用    Rails 3.0.20,    ruby 1.8.7(2011-06-30 patchlevel 352),和    delayed_job 3.0.4

6 个答案:

答案 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?