Ruby守护进程,干净关闭
发布时间:2020-12-17 04:21:30 所属栏目:百科 来源:网络整理
导读:我想创建一个 ruby守护进程,它可以使用kill命令正常关闭. 我想添加一个信号陷阱,等到#code可能需要一些时间来运行完成才能关闭.我如何将其添加到以下内容中: pid = fork do pid_file = "/tmp/pids/daemon6.pid" File.open(pid,'w'){ |f| f.write(Process.pi
我想创建一个
ruby守护进程,它可以使用kill命令正常关闭.
我想添加一个信号陷阱,等到#code可能需要一些时间来运行完成才能关闭.我如何将其添加到以下内容中: pid = fork do pid_file = "/tmp/pids/daemon6.pid" File.open(pid,'w'){ |f| f.write(Process.pid) } loop do begin #code that could take some time to run rescue Exception => e Notifier.deliver_daemon_rescued_notification(e) end sleep(10) end end Process.detach pid 另外,将它放在一个单独的脚本中会更好吗,比如单独的kill脚本而不是将它作为守护程序代码的一部分?像monit或上帝会要求阻止它的东西? 我很感激任何建议. 解决方法
你可以像这样抓住中断:
pid = fork do begin loop do # do your thing sleep(10) end rescue Interrupt => e # clean up end end Process.detach(pid) 您可以对Signal.trap(‘INT’){…}执行相同的操作,但是如果涉及睡眠,我认为捕获异常会更容易. 更新:这是一种更传统的方式,它确保循环始终在停止之前完成: pid = fork do stop = false Signal.trap('INT') { stop = true } until stop # do your thing sleep(10) end end 不利的一面是,它总是会进入睡眠状态,所以几乎总会有一个延迟,直到你杀死它后该过程停止.你可以通过突然睡觉,或者做各种变体的组合来解决这个问题(在睡眠中拯救中断或其他东西). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在C中创建/解压缩大型位域的有效方法?
- ruby – EventMachine和em-websocket – 从队列中读取并推送
- Oracle SQL:如果我将一个函数既作为字段又按顺序使用,是否
- c – 如何在不使用副本的情况下更改QJson层次结构中的QJson
- 使用React-route和Webpack快速构建一个react程序
- objective-c – CABasicAnimation – 设置起始行程位置
- LD_PRELOAD用于C类方法
- Oracle tnsnames.ora和listener.ora
- Oracle 表连接方式(内连接/外连接/自连接) 详解
- FPGA和CPLD使用时的区别 2012_7_29