【问题标题】:Can Phusion Passenger notify me that it's about to terminate my process?Phusion Passenger 可以通知我它即将终止我的流程吗?
【发布时间】:2013-07-19 02:16:53
【问题描述】:

As described here,Passenger 将分叉我的进程,我需要恢复我的后台线程。我这样做了,它通常可以工作,但有时我的进程在我的后台线程完成之前就被终止了。我在该后台线程上所做的只是将一堆数据排队,这样我就可以更有效地以更大的块发送它。 I just asked a similar question,不过我有个新想法:想知道能不能注册一个类似这个的回调:

PhusionPassenger.on_event(:starting_worker_process) do |forked|...

但不是在:starting_worker_process 事件上,我想得到通知我的进程即将终止,以便我可以快速刷新缓冲区并退出。有这样的活动吗?

【问题讨论】:

    标签: ruby-on-rails ruby passenger


    【解决方案1】:

    内核提供了#at_exit,可用于此。

    at_exit do
      # Cleanup
    end
    

    【讨论】:

    • 谢谢,克里斯。我已经把它准备好了,但它似乎没有在乘客下被调用。在独立的 ruby​​ 应用程序中,它可以完美运行。我立即刷新缓冲区,我的所有数据都通过了。乘客真的会杀死我的进程,还是只是让它们进入睡眠状态?我会尝试寻找 SIGKILL 等。当我收到 kill -9 时,我是否应该期望 at_exit 触发?
    • Passenger 实际上会在进程处于非活动状态足够长的时间后终止进程,但我不确定它使用哪种机制来执行此操作。 kill -9 将发送 SIGKILL,无法捕获或处理。您是否考虑过使用日志文件之类的东西从意外终止中恢复?
    【解决方案2】:

    从Passenger的源代码来看,似乎有一个名为:stopping_worker_process的事件。不过我还没有测试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2021-09-05
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      相关资源
      最近更新 更多