복붙노트

[REDIS] 어떻게 붙어 / 오래된 Resque 노동자를 삭제합니까?

REDIS

어떻게 붙어 / 오래된 Resque 노동자를 삭제합니까?

당신이 첨부 된 이미지에서 볼 수 있듯이, 나는 붙어 것 같다 노동자의 몇 가지있어. 이러한 프로세스는 몇 초보다 오래 걸릴해서는 안된다.

나는 확실히 그들은 분명하지 이유 또는 수동으로 제거하는 방법을 모르겠어요.

나는 Heroku가 자동으로 규모의 노동자 레디 스 간 이동 및 HireFire와 Resque을 사용 해요.

해결법

  1. ==============================

    1.나를 위해 일한 이러한 솔루션 중에, 나는 아직도 레디 스 - 웹에서 볼 않을 것이다 :

    나를 위해 일한 이러한 솔루션 중에, 나는 아직도 레디 스 - 웹에서 볼 않을 것이다 :

    0 out of 10 Workers Working
    

    마지막으로,이 모든 노동자를 취소 나를 위해 일한 :

    Resque.workers.each {|w| w.unregister_worker}
    
  2. ==============================

    2.콘솔에서 :

    콘솔에서 :

    queue_name = "process_numbers"
    Resque.redis.del "queue:#{queue_name}"
    

    그렇지 않으면 당신과 함께, 그들을 제거하기 위해 수행되는 것으로 가짜 그들에게 시도 할 수 있습니다 :

    Resque::Worker.working.each {|w| w.done_working}
    

    편집하다

    많은 사람들이 대답을 upvoting되었고, 나는 위의 코드는 큐를 삭제 반면에 사람들이 큐 떨어져있는 등록을 취소 노동자 hagope의 솔루션을 시도하는 것이 중요하다고 생각합니다. 당신이 가짜 그들에게 행복 경우, 냉각.

  3. ==============================

    3.콘솔을 열고 현재의 노동자를 얻을 수 있도록 당신은 아마의 resque 보석이 설치되어

    콘솔을 열고 현재의 노동자를 얻을 수 있도록 당신은 아마의 resque 보석이 설치되어

    Resque.workers
    

    그것은 노동자의 목록을 반환

    #=> [#<Worker infusion.local:40194-0:JAVA_DYNAMIC_QUEUES,index_migrator,converter,extractor>]
    

    예를 들어 첫 번째를 들어, 노동자와 prune_dead_workers를 선택

    Resque.workers.first.prune_dead_workers
    
  4. ==============================

    4.hagope에 의해 대답에 추가, 나는 일정 시간 동안 실행했던에만 등록 취소 근로자 수 있기를 원했다. 아래의 코드는 등록 취소 근로자는 300 초 (5 분) 동안 실행됩니다.

    hagope에 의해 대답에 추가, 나는 일정 시간 동안 실행했던에만 등록 취소 근로자 수 있기를 원했다. 아래의 코드는 등록 취소 근로자는 300 초 (5 분) 동안 실행됩니다.

    Resque.workers.each {|w| w.unregister_worker if w.processing['run_at'] && Time.now - w.processing['run_at'].to_time > 300}
    

    https://gist.github.com/ewherrmann/8809350 : 나는 또한이를 추가 한 Resque 관련 레이크 작업의 진행 컬렉션이

  5. ==============================

    5.서버를 시작하는 명령을 실행 곳이 명령을 실행

    서버를 시작하는 명령을 실행 곳이 명령을 실행

    $ ps -e -o pid,command | grep [r]esque
    

    당신은 다음과 같이 표시되어야합니다 :

    92102 resque: Processing ProcessNumbers since 1253142769
    

    내 예제에서 PID (프로세스 ID)의 메이크 노트는 92102입니다

    그럼 당신은 과정 1 2의 방법을 종료 할 수 있습니다.

    * 나는 중 92102를 종료 또는 QUIT되고 있는지 구문 아니에요 -92102

    당신은 어떤 문제가 있다면 알려주세요.

  6. ==============================

    6.난 그냥했다:

    난 그냥했다:

    % rails c production
    irb(main):001:0>Resque.workers
    

    노동자의 목록을 얻었다.

    irb(main):002:0>Resque.remove_worker(Resque.workers[n].id)
    

    ... n은 작업자의 불필요한 제로되는 인덱스이다.

  7. ==============================

    7.나는 레디 스가 무효 (비 실행) 근로자를 포함 디스크에 DB를 저장 한 비슷한 문제가 있었다. 때마다 레디 스 / resque들이 등장하기 시작했다.

    나는 레디 스가 무효 (비 실행) 근로자를 포함 디스크에 DB를 저장 한 비슷한 문제가 있었다. 때마다 레디 스 / resque들이 등장하기 시작했다.

    이 사용 수정 :

    Resque::Worker.working.each {|w| w.done_working}
    Resque.redis.save # Save the DB to disk without ANY workers
    

    당신이 레디 스하고 Resque 근로자를 다시 시작합니다.

  8. ==============================

    8.다음은 호스트 이름으로 레디 스에서 그들을 제거하는 방법입니다. 내가 서버를 해제하고 근로자가 정상적으로 종료되지 않을 때 나에게 발생합니다.

    다음은 호스트 이름으로 레디 스에서 그들을 제거하는 방법입니다. 내가 서버를 해제하고 근로자가 정상적으로 종료되지 않을 때 나에게 발생합니다.

    Resque.workers.each { |w| w.unregister_worker if w.id.start_with?(hostname) }
    
  9. ==============================

    9.나는이 문제에 달려 여기에 가장 많은 추천을 구현하는 경로 아래로 시작했다. 그러나, 나는 내가 보석 레디 스-RB 3.3.0을 사용하던 것을이 문제를 생성 된 근본 원인을 발견했다. 레디 스-RB 3.2.2으로 다운 그레이드 처음에 갇히지에서 이러한 노동자를 방지.

    나는이 문제에 달려 여기에 가장 많은 추천을 구현하는 경로 아래로 시작했다. 그러나, 나는 내가 보석 레디 스-RB 3.3.0을 사용하던 것을이 문제를 생성 된 근본 원인을 발견했다. 레디 스-RB 3.2.2으로 다운 그레이드 처음에 갇히지에서 이러한 노동자를 방지.

  10. ==============================

    10.최근 https://github.com/shaiguitar/resque_stuck_queue/에 작업을 시작했다. 그것은 붙어 근로자를 해결하는 방법에 대한 해결책은 아니지만 내가 그것을이 스레드에서 사람들에게 도움이 될 수있는 생각, 그래서 붙어되고 resque 매달려 /의 문제를 해결합니다. README에서 :

    최근 https://github.com/shaiguitar/resque_stuck_queue/에 작업을 시작했다. 그것은 붙어 근로자를 해결하는 방법에 대한 해결책은 아니지만 내가 그것을이 스레드에서 사람들에게 도움이 될 수있는 생각, 그래서 붙어되고 resque 매달려 /의 문제를 해결합니다. README에서 :

    resque가 특정 기간 내에 작업을 실행하지 않는 경우 ", 당신의 선택의 미리 정의 된 핸들러를 트리거합니다. 당신은 더 resque 노동자, 다시 시작 resque를 추가, 이메일, 호출기 의무를 보내려면이를 사용하여 당신에게 TXT을 보낼 수 있습니다. ..whatever 정장을. "

    생산에 사용하고 지금까지 나를 위해 꽤 잘 작동합니다.

  11. ==============================

    11.내가 여기에 너무 붙어 / 오래된 resque 노동자가 있고, 또는 근로자가 실제로 여전히 존재하고 벌금을 실행하기 때문에 나는 '작업'을 말해야한다, 그것은 붙어있는 갈래의 과정입니다.

    내가 여기에 너무 붙어 / 오래된 resque 노동자가 있고, 또는 근로자가 실제로 여전히 존재하고 벌금을 실행하기 때문에 나는 '작업'을 말해야한다, 그것은 붙어있는 갈래의 과정입니다.

    나는 그 노동자가 바로 큐의 다음를 생성, bash는 스크립트를 통해,보다 5 분 이상 이후 갈래 과정 "처리"를 죽이는 잔인한 솔루션을 선택하고, 모든가는 유지

    여기 내 스크립트를 보라 : https://gist.github.com/jobwat/5712437

  12. ==============================

    12.내가 직접 레디 스-CLI에서 그들을 삭제했습니다. 다행히 redistogo.com는 Heroku가 외부 환경에서 액세스 할 수 있습니다. 목록에서 죽은 노동자의 ID를 가져옵니다. 광산이었다

    내가 직접 레디 스-CLI에서 그들을 삭제했습니다. 다행히 redistogo.com는 Heroku가 외부 환경에서 액세스 할 수 있습니다. 목록에서 죽은 노동자의 ID를 가져옵니다. 광산이었다

    55ba6f3b-9287-4f81-987a-4e8ae7f51210:2
    

    직접 레디 스에서이 명령을 실행하십시오.

    del "resque:worker:55ba6f3b-9287-4f81-987a-4e8ae7f51210:2:*"
    

    당신은 무대 뒤에서 무엇을하고 있는지 볼 레디 스 DB를 모니터링 할 수 있습니다.

    redis xxx.redistogo.com> MONITOR
    OK
    1380274567.540613 "MONITOR"
    1380274568.345198 "incrby" "resque:stat:processed" "1"
    1380274568.346898 "incrby" "resque:stat:processed:c65c8e2b-555a-4a57-aaa6-477b27d6452d:2:*" "1"
    1380274568.346920 "del" "resque:worker:c65c8e2b-555a-4a57-aaa6-477b27d6452d:2:*"
    1380274568.348803 "smembers" "resque:queues"
    

    두 번째 마지막 줄은 노동자를 삭제합니다.

  13. ==============================

    13.당신이 Resque의 최신 버전을 사용하는 경우, 당신은 내부 API를 변경으로 다음 명령을 사용해야합니다 ...

    당신이 Resque의 최신 버전을 사용하는 경우, 당신은 내부 API를 변경으로 다음 명령을 사용해야합니다 ...

    Resque::WorkerRegistry.working.each {|work| Resque::WorkerRegistry.remove(work.id)}
    
  14. ==============================

    14.이는 당신이 1.26.0보다 최신 resque 버전이 같은 문제를 피할 수 있습니다 :

    이는 당신이 1.26.0보다 최신 resque 버전이 같은 문제를 피할 수 있습니다 :

    resque: env QUEUE=foo TERM_CHILD=1 bundle exec rake resque:work
    

    는 현재 실행중인 작업의 마무리를하지 않고 있음을 유의하십시오.

  15. ==============================

    15.당신은 또한 모든 구조 노동자를 중지 명령 아래에 사용할 수 있습니다

    당신은 또한 모든 구조 노동자를 중지 명령 아래에 사용할 수 있습니다

    sudo kill -9  `ps aux | grep resque | grep -v grep | cut -c 10-16`
    

    이 링크에서 참조

  16. from https://stackoverflow.com/questions/7416318/how-do-i-clear-stuck-stale-resque-workers by cc-by-sa and MIT license