4

delayed_job用来运行作业,cronjob 每分钟都会添加新作业。

目前我有一个问题,即当前以 'nohup rake jobs:work &' 手动启动的 rake jobs:work 任务随机退出。

虽然上帝似乎是某些人的解决方案,但额外的内存开销相当烦人,我更喜欢可以通过部署脚本(Capistrano)重新启动的更简单的解决方案。

是否有一些 bash/Ruby 魔法来实现这一点,或者我注定要在我的服务器上运行一个监控服务,并使用一些可怕的黑客来允许该站点部署的非私有帐户能够重新启动它?

4

4 回答 4

0

对我来说,delayed_job 的守护进程 gem 是不可靠的。可能是一个写得不好的脚本(正在使用collectiveidea的delayed_job github页面上的那个),而不是守护进程的错误,我不太确定。但无论出于何种原因,它都会在部署时不一致地重新启动。

我在某处读到这是因为它没有等待进程实际退出,因此 pid 文件会被覆盖或其他原因。但我并没有真正费心去调查。我使用这些说明切换到 daemons-spawn gem ,现在它似乎更加可靠。

于 2009-08-12T01:50:54.143 回答
0

我已经实现了一次又一次地重新启动作业任务的小型 rake 任务:

desc "Start a delayed_job worker in a endless loop to prevent exits."
task :jobs => :environment do
  while true
    begin
      Delayed::Worker.new(:min_priority => ENV['MIN_PRIORITY'], 
                          :max_priority => ENV['MAX_PRIORITY'], 
                          :quiet => false).start
    rescue Exception => e
      puts "Exception occured (#{e})"
    end
    puts "Task jobs:work exited, clearing queue and restarting"
    sleep 1
    Delayed::Job.delete_all
  end
end

显然它没有用。所以我以这个简单的解决方案结束:

for (( ;; )); do rake jobs:work --trace; done
于 2011-08-23T11:59:17.127 回答
0

delayed_job文档建议您使用监控服务来管理 rake worker 作业。我使用runit——效果很好。

(可以在不替换init的模式下安装。)

添加:

回复:由 Capistrano 重新启动:是的,runit 启用了它。做一个

sudo sv kill delay_job

在您的 Capistrano 配方中杀死 delay_job 工人。Runit 将使用您新部署的代码库重新启动它。

于 2009-07-15T02:32:50.200 回答
0

摆脱延迟的工作并随时使用重新使用

于 2013-03-11T11:17:37.307 回答