我意识到当任何 cron 有输出时它都会通过电子邮件发送该输出...我想确定的是,如果我有一个计划在周二凌晨 3 点运行的脚本并且由于某种原因它引发错误或运行失败,我想知道...
我现在正在考虑设置一个数据库表,用于存储每个 cron 命令的上次运行时间戳,以便我们每周获得 cron 命令的报告。或者可能在数据库中存储它应该运行的时间和上次运行的时间,如果出现问题,它会给我们发送电子邮件。
“发送电子邮件”将由我们的内部系统完成,我们的员工会持续登录,因此它不会基于 cron 本身。
有没有更好的解决办法?
答案1
我认为监控系统日志是最简单的解决方案。
将您的系统日志转发到您的监控系统,然后在您的监控系统内设置警报。
我以前也设置过自定义 SNMP MIB,你可以将特定 cronjob 上次运行的时间戳放入其中。然后某个外部系统可以监控该 snmp MIB 以获取超过 24 小时的时间戳。
答案2
您的解决方案是可行的,但它重新发明了一些您可能不需要的轮子。
首先,您确实应该拥有某种类型的监控服务。我倾向于使用 nagios,但市面上有很多这样的系统。选择其中一个系统并让它监控您的 cron 守护程序。
然后编写一个插件,利用 voretaq7 提到的包装器。如果 cronjob 失败并且 crond 也失败,您将收到警报。
我建议这样做的原因是,这样您就可以将所有监控集中在一个地方。最终,您将不得不拥有一个站点范围的监控系统,而将精力投入其中比建立一系列分散的监控系统更有意义。
答案3
我为这种类型的监控构建了一个简单的工具 -https://cronitor.io
它允许您设置间隔(每 24 小时)和持续时间(大于 10 分钟、小于 2 分钟等),然后如果您的 cron 作业(或任何其他自动任务)未按照您定义的规则运行,则会收到电子邮件/短信警报。
该工具对于单个监控者来说是免费的,而对于有多个监控需求的人,则提供付费计划。
答案4
您的解决方案听起来比我想象的要复杂一些。
从检查和/或监控开始/var/log/cron.log
(或您的 cron 日志所在的任何地方)。cron 可以很好地记录它运行的每个命令以及错误。如果您想知道发生了什么,那就去看看吧。如果您担心 cron 会死机,您可以设置一个 cron 心跳,每 5 分钟记录一次,如果您没有看到心跳,请发送某种警报。如果您真的觉得需要第二个工具来监视 cron,您可以使用一个 perl 包 ( Schedule::Cron
) 定期检查心跳。如果您担心本地机器的可靠性,您还可以将日志发送到第二台机器进行监控/处理/警报/等。
或者,您也可以使用某种系统监控工具(SNMP、Nagios、Hobbit/BigSister 等)从外部监控 cron 进程是否正在运行。您确实在监控系统的运行状况,对吗?
不过,如果你真的担心 cron 死亡,您可能需要考虑重建或更换您的机器。cron 应该非常可靠,如果它失败了,它可能是一个更大问题的征兆。