5

我有 Resque 工作人员,通常运行时间不应超过 1-5 分钟,但这些工作人员经常会“卡住”并闲置,堵塞工作人员而无所事事。

所以我想定期检查运行时间超过 X 时间的工人并清除它们。但我需要自动执行此操作,因此我不必Resque.workers.each {|w| w.unregister_worker}每隔几个小时亲自进入并手动清除它们 ( )。

这需要在 Heroku 上工作。

4

3 回答 3

5

将其放入 rake 任务中:

allocated_time = 60 * 60 # 1 hour
Resque::WorkerRegistry.working.each do |worker|
  if (worker.started <=> Time.now - allocated_time) < 1
    worker.unregister
  end
end

使用 heroku 调度程序,如果该套件,您可以将其设置为至少 10 分钟。

于 2013-06-24T11:26:54.553 回答
0

对于 Resque v1,

# lib/tasks/clear_stale_workers.rake
namespace :clear do
  desc 'Clearing stuck workers ...'
  task :stale_workers => :environment do
    Resque.workers.each do |w|
      w.unregister_worker unless w.started > 1.hour.ago
    end
  end
end

从命令行,rake clear:stale_workers

在 Heroku 上,设置调度程序以运行此 Rake 任务。

于 2013-11-14T11:33:24.087 回答
0

这对我来说可以删除运行陈旧工作的特定工作人员。您可以将其添加到 rake 任务中。

Resque::Worker.working.each{|w| w.done_working }
于 2013-12-13T17:47:13.447 回答