16

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

我正在使用 Rails 3.0.20、ruby 1.8.7(2011-06-30 补丁级别 352)和延迟作业 3.0.4

4

6 回答 6

22

使用Rails 5.x,您可以 ssh 进入您的服务器并进入应用程序中的 /current 文件夹并运行:

RAILS_ENV=production bin/delayed_job status
于 2015-01-07T22:02:45.210 回答
14

您可以使用

RAILS_ENV=production script/delayed_job status 

如果您在生产模式下检查

于 2014-04-14T11:54:14.567 回答
8

检查delayed_job 是否正在运行的最简单方法是在locked_by字段中检查。

该字段将包含工作人员或进程锁定/处理作业。

如果有作业正在运行,运行Delayed::Job.where('locked_by is not null') 会给你一些结果。

除此之外,您可以让发条任务执行此查询,以检查状态。

希望这可以帮助。

于 2014-02-17T10:56:28.113 回答
4

目前,我能想到的确保delayed_job daemon始终运行的最佳方法是initializer向我们的 Rails 应用程序添加一个检查守护程序是否正在运行的应用程序。如果它没有运行,则initializer启动daemon,否则,它就让它保持原样。

因此,现在的问题是,我们如何检测到Delayed_Job daemon是从脚本内部运行的?

最简单的方法——

检查守护进程是否存在PID file(File.exist? ...)。如果它在那里,则假设它正在运行,否则启动它。

于 2013-02-14T08:40:44.723 回答
2

要检查作业状态等,您可以使用delayed_job_web gem,它会列出所有排队的作业。并确保其始终运行安装 monit。这是railscast。这是有关如何为延迟作业配置监控的更多信息

于 2013-02-14T09:23:26.353 回答
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

检查如何确定是否在 Linux 上使用 Java 或 JRuby 运行不同的进程 ID?

于 2015-02-03T06:31:04.823 回答