如果在一个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 的单独日志和服务管理器自己的日志,以确定守护进程重新启动的时间和频率,以及它输出的错误消息(如果有)。
进一步阅读
- 乔纳森·德博因·波拉德 (2015)。守护进程工具家族。常见答案。
- 格里特·帕普.Debian 软件包
- https://unix.stackexchange.com/a/283132/5132
- https://unix.stackexchange.com/a/283580/5132
答案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
无需安装daemontools
、runit
、supervise
等。尽管这些工具很有用,但它们涵盖了您通常不需要只使用 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
脚本以供以后使用。