2016-06-16 8 views
1

모든 작업자에게 특정 대기열 (또는 모든 대기열)에 대한 새로운 작업 처리를 중단하도록 지시하는 방법이 있습니까?Resque Queues가 새 작업을 처리하는 것을 일시적으로 중지하는 방법은 무엇입니까?

필요한 시스템을 사용할 수 없거나 (전원이 꺼지거나 하드웨어 오류 등) 가끔 문제가 발생하며 시스템이 온라인 상태가 될 때까지 대기열에서 작업 처리 기능을 끄는 것이 도움이됩니다.

각 작업이 모든 하위 시스템이 양호/나쁜 상태에 있다고 판단하는 대신 대기열에 신호를 보내 대기열에 신호를 보내고 하위 시스템이 다시 준비 상태가되면 다시 활성 상태로 만들 수 있습니다.

무거운 수법은 모든 작업자를 외부 적으로 종료하는 것입니다.

답변

0

문서에는 이러한 신호를 사용하여 resque 작업을 시작/계속할 수 있다고 나와 있습니다.

신호

Resque 노동자는 몇 가지 다른 신호에 응답 :

...

USR2이 -

CONT 새로운 작업을 처리하기 위해 시작하지 마십시오 -로 시작 USR2 이후 새로운 작업을 다시 처리하십시오.

올린 사람 : https://github.com/resque/resque/tree/cf0897709e857bd557dc7e407e282dc0f2b461df#signals

+0

감사합니다. 비록 자동화 관점에서 보면 어색합니다. 즉 각 머신에 접속하여 각 프로세스에 대해 킬 신호를 발행한다. – crispy

0

This gist은 resque가 원숭이 패치로 새로운 작업을 중단하는 방법을 보여줍니다.

resque를 일시 중지 한 후에도 여전히 일부 작업이 처리 중일 수 있습니다. 여기에 모든 작업이 완료 될 때까지 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