Я запускаю rufus-scheduler в задаче грабли, которая работает на работника герою. Я регулярно получаю исключение SIGTERM из-за регулярного перезапуска dynkus (см. heroku dyno docs). Я хотел бы реализовать корректное завершение работы, показанной в указанных выше Документах и выключение Руфус планировщика во время этого процесса:Изящно останавливать планировщик rufus на рабочем столе героя
trap('TERM') do
scheduler.shutdown(:kill)
exit
end
Однако, когда я пытаюсь отправить SIGTERM процессу с этой задачей, я получаю сообщение об ошибке:
can't be called from trap context
Есть ли способ изящно закрыть планировщик rufus на SIGTERM? Я использую ruby 2.0, rake 10.0.4, rufus-scheduler 3.0.2.
P.S. Нет, я не могу использовать планировщик героку, потому что мне нужно каждую минуту запускать эту задачу ;-).
EDIT (jmettraux)
тестовый код: https://gist.github.com/jmettraux/a4c00374f58e9f7affa8
рубин 2.0.0-P247, Руфус-планировщик 3.0.5 на урожайность Debian GNU/Linux:
/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>'
Same платформу, но с Ruby 1.9.3-p392, и она изящно закрывается.
Пожалуйста, включают полное сообщение об ошибке. Заранее спасибо. – jmettraux
https://www.ruby-forum.com/topic/4411227 – jmettraux
@jmettraux: спасибо за редактирование! – mrzasa