我如何设置一个系统来告诉我cron作业是否运行不正常?

我如何设置一个系统来告诉我cron作业是否运行不正常?,cron,task,scheduled-tasks,Cron,Task,Scheduled Tasks,这更像是一个“通用架构”问题。如果您有一个cron作业(甚至是一个Windows计划的任务)定期运行,让它向您发送一封电子邮件/文本消息表示一切正常就有点简单了,但是当一切都不正常时,我如何得到通知呢?基本上,如果作业没有在预定的时间运行,或者Windows/linux有自己的一组挂起,阻止任务运行 只是想问问以前遇到过这种情况的人的想法,然后想出有趣的解决方案……我过去做过的一种方法就是简单地在每个脚本的顶部(比如,checkUsers.sh): 然后有另一个定期运行的作业,它使用find查找

这更像是一个“通用架构”问题。如果您有一个cron作业(甚至是一个Windows计划的任务)定期运行,让它向您发送一封电子邮件/文本消息表示一切正常就有点简单了,但是当一切都不正常时,我如何得到通知呢?基本上,如果作业没有在预定的时间运行,或者Windows/linux有自己的一组挂起,阻止任务运行


只是想问问以前遇到过这种情况的人的想法,然后想出有趣的解决方案……

我过去做过的一种方法就是简单地在每个脚本的顶部(比如,
checkUsers.sh
):

然后有另一个定期运行的作业,它使用
find
查找
tmp/lastrun
中所有超过一天的“标记”文件

您可以随意调整计时,使用
/tmp/lastrun/hour/
tmp/lastrun/day/
来分离具有不同时间表的作业

请注意,这不会捕获从未运行过的脚本,因为它们永远不会为
find
-ing创建初始文件。为了缓解这种情况,您可以:

  • 在创建cron作业时手动创建该文件(不会处理有人无意中删除标记文件的情况);或
  • 在某处维护所需标记文件的列表,以便您可以检测它们何时丢失或过时
而且,如果您的cron作业不是脚本,请将
触摸键直接放入
crontab

0 4 * * * ( touch /tmp/lastrun/daily/checkUsers ; /usr/bin/checkUsers )

验证一个简单的
find
脚本要比验证每个
cron
作业容易得多。

如果这是一个愚蠢的问题,请原谅我,但如果一个cron失败,它们是否都会(如果是硬件或软件错误)?不一定,问题可能在于crontab文件中的行,也可能是脚本的权限问题。如果cron本身有故障,是的。然后,您可以将其放入登录脚本中(或
/etc/profile
,或在其他地方装载一个NFS文件系统,并在其中接触文件,希望其cron将运行以进行检查)。但是,如果
cron
本身不起作用,则几乎没有其他自动检查选项。在某种程度上,你必须相信一层软件可以正常工作:-)我并没有说它是万无一失的-它所做的只是让检测故障变得更容易。有趣的方法。。。不完全是我想要的。。。(一个更完整的解决方案,可能还使用外部系统)制作一个检查cron作业的cron作业:尽管很幽默,David,这是一个不错的建议。单个cron作业可能会因多种原因而失败,其中只有一个原因是整个cron子系统处于关闭状态。谢谢alex。David/paxdiablo-依赖“外部”或第三方cron服务是否是一个不错的选择。。。作为“cron checker”?我不想麻烦。老实说,在我30年的职业生涯中,我从未见过cron失败超过几次。我不确定我是否会在一些不太可能的事情上付出很多努力。但是,如果您真的想安心,可以使用单独的cron作业来确保其他作业正在运行,还可以让作业向另一台机器发送某种消息,也许可以使用其cron(meta-cron)来检查消息是否尚未到达。请记住,在其他情况下(如网络关闭),这会给您带来误报。你想要一个元cron来监视它吗?:-)
0 4 * * * ( touch /tmp/lastrun/daily/checkUsers ; /usr/bin/checkUsers )