有没有办法告诉所有工人停止处理特定队列(或所有队列)的任何新作业?
我们偶尔会遇到需要的系统不可用(断电,硬件故障等)的问题,在系统重新联机之前关闭这些队列中的作业处理会很有帮助。
代替每个作业确定所有子系统都处于良好/不良状态,有一些信号表明队列处于休眠状态,然后在子系统再次准备就绪时将它们恢复活动将会很有帮助。
一种严厉的方式是外部关闭所有工人。
答案 0 :(得分:0)
文档提到您可以使用这些信号来启动/继续重新启动作业。
信号
Resque工作人员回应了几个不同的信号:
...
USR2 - 不要开始处理任何新工作
CONT - 在USR2之后再次开始处理新作业
来自:https://github.com/resque/resque/tree/cf0897709e857bd557dc7e407e282dc0f2b461df#signals
答案 1 :(得分:0)
This gist,显示了如何修补resque以停止接收新工作。
暂停resque后,它可能仍在处理一些工作。这是一个rake任务,等待所有工作完成10分钟,10分钟后,如果还有工作,他们会被杀死:
stop_at = Time.now
until Resque.working.empty?
Rails.logger.info "Waiting for #{Resque.info[:working].length} jobs to finish"
sleep(30.seconds)
if stop_at < 10.minutes.ago
Rails.logger.info 'Killing all jobs that didnt finish in 10 minutes...'
Resque.working.map(&:unregister_worker)
end
end