如何监控 cron 任务并在它们不运行时获取电子邮件?

如何监控 cron 任务并在它们不运行时获取电子邮件?

我意识到当任何 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 应该非常可靠,如果它失败了,它可能是一个更大问题的征兆。

相关内容