【发布时间】:2025-09-09 06:55:02
【问题描述】:
最近我运行以下命令来启动每三天运行一次的守护进程。 RAILS_ENV=production lib/daemons/mailer_ctl start,它正在工作,但是当我一周后回来时发现该进程被杀死了。
这正常吗?
提前致谢。
【问题讨论】:
标签: ruby-on-rails linux ruby-on-rails-plugins daemon
最近我运行以下命令来启动每三天运行一次的守护进程。 RAILS_ENV=production lib/daemons/mailer_ctl start,它正在工作,但是当我一周后回来时发现该进程被杀死了。
这正常吗?
提前致谢。
【问题讨论】:
标签: ruby-on-rails linux ruby-on-rails-plugins daemon
不。据我了解,这个守护进程应该一直运行到 你 杀死它。这个想法是让它定期工作,对吧?所以守护进程应该醒来,做它的工作,然后回到睡眠状态直到需要。所以如果它被杀死了,那就不正常了。
问题是它为什么被杀,你能做些什么。第一个问题是调试分离进程时最难回答的问题之一。除非您的守护程序在日志中留下一些线索,否则您可能很难找出它何时以及为何终止。如果你查看你的日志(如果你很幸运的话)可能会有一些线索——我会从你怀疑它上次运行的时候开始,然后查看你的 Rails production.log,守护进程可能的任何日志文件也可以在系统日志中创建。
让我们暂时假设您永远无法弄清楚这个守护进程发生了什么。如何处理它成为一个有趣的问题。第一步是:尽可能多地记录日志,而不会使日志过于庞大或影响性能。至少记录唤醒、处理和完成事件,以及捕获信号并记录它们。最好登录到 Rails production.log 以外的其他地方。您可能还希望以小于 3 天的间隔运行守护程序,直到您确定它是稳定的。
考虑使用像monit (http://mmonit.com/monit/) 或god (http://god.rubyforge.org/) 这样的进程监控工具。这些工具可以“监视”守护程序的状态,如果它们没有运行,可以自动启动它们。你仍然需要弄清楚他们被杀的原因,但至少你有一些安全网。
【讨论】: