我有 Resque 工作人员,通常运行时间不应超过 1-5 分钟,但这些工作人员经常会“卡住”并闲置,堵塞工作人员而无所事事。
所以我想定期检查运行时间超过 X 时间的工人并清除它们。但我需要自动执行此操作,因此我不必Resque.workers.each {|w| w.unregister_worker}
每隔几个小时亲自进入并手动清除它们 ( )。
这需要在 Heroku 上工作。
我有 Resque 工作人员,通常运行时间不应超过 1-5 分钟,但这些工作人员经常会“卡住”并闲置,堵塞工作人员而无所事事。
所以我想定期检查运行时间超过 X 时间的工人并清除它们。但我需要自动执行此操作,因此我不必Resque.workers.each {|w| w.unregister_worker}
每隔几个小时亲自进入并手动清除它们 ( )。
这需要在 Heroku 上工作。
将其放入 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 分钟。
对于 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 任务。
这对我来说可以删除运行陈旧工作的特定工作人员。您可以将其添加到 rake 任务中。
Resque::Worker.working.each{|w| w.done_working }