Ruby 如何暂时停止重新创建队列以处理新作业?

Ruby 如何暂时停止重新创建队列以处理新作业?,ruby,resque,job-control,Ruby,Resque,Job Control,有没有办法告诉所有员工停止处理特定队列(或所有队列)的任何新作业 我们偶尔会遇到需要的系统不可用(断电、硬件故障等)的问题,在这些队列中关闭作业处理,直到系统重新联机,这会有所帮助 与其让每个作业确定所有子系统都处于良好/不良状态,不如让一些东西通知队列进入休眠状态,然后在子系统再次就绪时使它们恢复活动状态 一种严厉的方法是从外部关闭所有工人。文档中提到,您可以使用这些信号启动/继续重新确认作业 信号 Resque工人对几个不同的信号作出反应: USR2-不要开始处理任何新作业 CONT-在U

有没有办法告诉所有员工停止处理特定队列(或所有队列)的任何新作业

我们偶尔会遇到需要的系统不可用(断电、硬件故障等)的问题,在这些队列中关闭作业处理,直到系统重新联机,这会有所帮助

与其让每个作业确定所有子系统都处于良好/不良状态,不如让一些东西通知队列进入休眠状态,然后在子系统再次就绪时使它们恢复活动状态


一种严厉的方法是从外部关闭所有工人。

文档中提到,您可以使用这些信号启动/继续重新确认作业

信号

Resque工人对几个不同的信号作出反应:

USR2-不要开始处理任何新作业

CONT-在USR2之后再次开始处理新作业

From:

,展示了如何通过修补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
stop_at=Time.now
直到Resque.working.empty?
Rails.logger.info“正在等待#{Resque.info[:working].length}作业完成”
睡眠(30秒)
如果在<10分钟前停止
Rails.logger.info“杀死10分钟内未完成的所有作业…”
Resque.working.map(&:unregister_worker)
结束
结束

谢谢,我得考虑一下这个问题。虽然从自动化的角度来看这很尴尬。i、 e.联系每台机器,并为每个过程发出终止信号。