首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优雅地停止heroku worker上的rufus调度程序

优雅地停止heroku worker上的rufus调度程序
EN

Stack Overflow用户
提问于 2014-02-12 16:10:21
回答 2查看 916关注 0票数 1

我在一个在heroku工人身上运行的rake任务中运行rufus调度程序。我经常得到SIGTERM异常,因为正常的heroku重新启动(请参阅heroku dyno博士)。在此过程中,我希望实现上述文档中所示的优雅关闭和关闭rufus调度程序:

代码语言:javascript
复制
trap('TERM') do
  scheduler.shutdown(:kill)
  exit
end

然而,当我试图用这个任务向进程发送SIGTERM时,我得到了错误:

代码语言:javascript
复制
can't be called from trap context

是否有任何方法可以在SIGTERM上优雅地关闭rufus调度程序?我使用ruby 2.0,rake 10.0.4,rufus-调度器3.0.2。

不,我不能使用heroku调度程序,因为我需要每分钟运行这个任务;-)。

编辑 (jmettraux)

测试代码:https://gist.github.com/jmettraux/a4c00374f58e9f7affa8

Ruby2.0.0-p247,rufus- Debian /Linux上的调度程序3.0.5

代码语言:javascript
复制
/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>'

相同的平台,但有Ruby1.9.3-p 392,它会优雅地关闭。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-13 21:55:40

好的,它是Ruby2.0特定的(https://www.ruby-forum.com/topic/4411227)

下一个版本的rufus调度程序将包括一个解决方案。

https://github.com/jmettraux/rufus-scheduler/issues/98

谢谢你报道这个问题。

票数 1
EN

Stack Overflow用户

发布于 2014-02-13 22:16:45

您所遇到的问题是由于Thread同步在trap中。我会以这样的方式工作:

代码语言:javascript
复制
p "#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
p $$
require 'rufus-scheduler'

s = Rufus::Scheduler.new

trap('TERM') do
  $quit = true
end

s.every '10s' do
  p :hello
end

s.every '1s' do
  if $quit
    p :bye
    s.shutdown(:kill)
  end
end

s.join

shell1:

代码语言:javascript
复制
$ ruby exit_scheduler.rb
"2.0.0-p0"
60580

shell2:

代码语言:javascript
复制
$ kill -s TERM 60580

shell1:

代码语言:javascript
复制
:bye
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21733308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档