heroku worker에서 실행되는 rake 태스크에서 rufus-scheduler를 실행합니다. 정기적으로 heroku dynos를 다시 시작하기 때문에 SIGTERM 예외가 정기적으로 발생합니다 (heroku dyno docs 참조). 나는이 과정에서 위에서 언급 한 문서 및 종료 루퍼스 스케줄러에 표시된 정상 종료를 구현하고 싶습니다 :이 작업과 프로세스에 SIGTERM을 보내려고 할 때, 그러나heroku worker에서 rufus 스케줄러를 정상적으로 중지하십시오.
trap('TERM') do
scheduler.shutdown(:kill)
exit
end
내가 얻을 오류 :
can't be called from trap context
SIGTERM에서 정상적으로 rufus 스케줄러를 종료하는 방법이 있습니까? ruby 2.0, rake 10.0.4, rufus-scheduler 3.0.2를 사용합니다.
P. 아니, heroku 스케줄러를 사용할 수 없습니다. 매분이 작업을 실행해야하기 때문에 ;-).
편집 (jmettraux)
테스트 코드 : https://gist.github.com/jmettraux/a4c00374f58e9f7affa8
루비 데비안 GNU/리눅스 금리 2.0.0-p247, 루퍼스 - 스케줄러 3.0.5 :
/home/jmettraux/w/rufus-scheduler/lib/rufus/scheduler/job_array.rb:74:
in `synchronize': can't be called from trap context (ThreadError)
from /home/jmettraux/w/rufus-scheduler/lib/rufus/scheduler/job_array.rb:74:in `to_a'
from /home/jmettraux/w/rufus-scheduler/lib/rufus/scheduler.rb:276:in `jobs'
from /home/jmettraux/w/rufus-scheduler/lib/rufus/scheduler.rb:127:in `shutdown'
from t.rb:8:in `block in <main>'
from t.rb:18:in `call'
from t.rb:18:in `sleep'
from t.rb:18:in `<main>'
동일 플랫폼이지만 Ruby 1.9.3-p392를 사용하면 정상적으로 종료됩니다.
가 전체 오류 메시지를 포함 해 주시기 바랍니다. 미리 감사드립니다. – jmettraux
https://www.ruby-forum.com/topic/4411227 – jmettraux
@jmettraux : 편집 해 주셔서 감사합니다! – mrzasa