确保 cron 守护进程保持运行

确保 cron 守护进程保持运行

如果在一个Debian 7在托管虚拟机和最新cron守护进程中运行的服务器(喘息)存在错误,因此 cron 在没有明显原因的情况下停止运行。由于这种情况只发生过一次,因此很难调试。

如果 cron 再次崩溃并发送电子邮件警报,如何确保它自动重新启动?

答案1

您可以随时查看监控项目。
您可以重新启动服务并让它们跟上。
如果您无法按照评论建议修复您的 cron。

答案2

我不能运行 daemontools 之类的东西来监视和重新启动该进程吗?

确实是的;在某些机器上我就是这样做的。 “类似 daemontools 的东西”实际上是来自的服务管理器小吃包但 daemontools 家族的其他成员完全有能力管理 GNU cron。 (Vixie cron 是另一回事,但你确实说的是 Debian。)

GNU cron 是在 daemontools 系列服务管理下运行的最简单的服务之一。 Gerrit Pape 的运行脚本集合有它,nosh 工具集附带的服务捆绑包集合也有。

也就是说,我不记得曾经需要重新启动 GNU cron因为它崩溃了

从最重要的方面来说,服务管理不仅仅是自动重启。这是关于日志记录和资源控制,两者都与任务相关诊断原因GNU cron 正在崩溃。

诊断问题涉及以下内容:

  • 编辑run用于softlimit启用核心转储的程序。
  • 编辑restart脚本(或同等内容)...
    • …检查守护进程是否退出或通过信号终止。
    • ...收集核心转储。
    • ...发出警报并发送邮件通知。 (我曾经设置过一个脚本,将崩溃/中止restart的最后几行邮件发送给我。)log/main/current
    • ...调整重启速率限制。
  • 读取 GNU cron 的单独日志和服务管理器自己的日志,以确定守护进程重新启动的时间和频率,以及它输出的错误消息(如果有)。

进一步阅读

答案3

由于无法crond通过我进行监控,因此crond我会这样做:
echo "while true; do if ! (ps aux |grep crond |grep -v grep); then /etc/init.d/crond start; fi && sleep 5; done &" >> /etc/rc.local

答案4

无需安装daemontoolsrunitsupervise等。尽管这些工具很有用,但它们涵盖了您通常不需要只使用 cron 的用例。您只需需要的东西就可以通过 init 轻松处理。添加到/etc/inittab:

cron:2345:respawn:/usr/sbin/crond -n

首先确保crond支持该-n选项。这告诉它不要分叉并保留在前台。 ** 请务必从 rc 脚本中禁用 crond **。

/usr/lib/lsb/remove_initd /etc/init.d/crond

如果由于某种原因 crond 输出到 stdout 或 stderr,您将需要编写一个包装器脚本来处理该输出,并生成包装器脚本。保持脚本简单:

#!/bin/sh
#crond-wrapper.sh 
exec crond -n &>>/var/log/crond

或者,您可以使用在 while 循环内init.d/crond调用的脚本来修改现有的打包脚本。crond -n但在这种情况下,您必须巧妙地保存该pid脚本以供以后使用。

相关内容