다시 시작하거나 배포하면 실패한 대기열에 Resque::TermException (SIGTERM)
또는 Resque::DirtyExit
과 같은 많은 Resque 작업이 생성됩니다. 우리는 또한 내가 힘의이 두 가지 예외에 자동 재 시도 생각하는 resque-retry
을 사용하고Heroku : TermException 또는 SIGTERM from Heroku에서 정상적으로 복구
worker: TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 bundle exec rake environment resque:work QUEUE=critical,high,low
:처럼 우리는 우리의 Procfile의 새로운 TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10
을 사용하고
그래서 우리의 노동자 라인이 보인다? 하지만 그렇지 않은 것 같습니다.
- 우리는 수동으로 각 작업에
Resque::TermException
에서 구출하고, 작업을 다시 예약하려면이 옵션을 사용할 수 있습니다그래서 나는 두 가지 질문을 것 같아요. 그러나 모든 작업에 대해이를 수행 할 수있는 깨끗한 방법이 있습니까? 심지어 원숭이 패치.
- 자동 다시 시도 하시겠습니까? 왜 그렇게되지 않을지 생각할 수 있습니까?
고마워요!
편집 : 모든 작업을 10 초 이내에 완료하는 것이 비례 적으로 보입니다. Resque :: DirtyExit 예외가 실행될 때 이러한 작업을 자동으로 대기열에 두는 방법이 필요합니다.
Upvoted 및 접수 - 우리가 비록 10 초 이상 그들 모두를 얻을 수 있다면 솔직히 모르겠어요. 우리는 하나의 파일을 생성해야하는 커다란 수출품 등을 가지고 있습니다. Re-enqueueing이 문제를 해결하는 것처럼 보입니까? 'Resque :: TermException'과'Resque :: DirtyExit' 사이의 차이점을 공유 할 수 있습니까? 나는 Resque :: DirtyExit을 위해 거기에 구조를 가지고있다. 그러나 그것은 항상 re-enqueue하는 것처럼 보이지 않는다. 감사! –
업데이트로, 그들은 이상하게도 작업에서'Resqueue Resque :: DirtyExit'을 가지고 있음에도 불구하고 때로는 예외를 깨끗하게 구출하지 않습니다. 나는 이유를 알아낼 수 없었다. 이것은 Resque :: DirtyExit 예외가있는 실패한 대기열에서 여전히 작업을 찾을 수 있기 때문에 작업을 신뢰할 수 없게 만듭니다. 정말 문제가되고있다. –
누군가가 작업자 내부에서 SIGTERM을 처리하여 작업자가 깨끗하게 셧다운 할 수있는 방법을 제안 할 수 있습니까? 예를 들어 (resque) 작업자도 SIGTERM을 잡아서 루핑 코드가 주기적으로 검사하는 변수를 설정해야합니까? TermException 또는 DirtyException이 RESQUE_TERM_TIMEOUT secnds 후에 만 전달된다고 가정합니다. –