如何设置系统来告诉我 cron 作业是不是运行不正常?
Posted
技术标签:
【中文标题】如何设置系统来告诉我 cron 作业是不是运行不正常?【英文标题】:How can I setup a system to tell me if a cron job is NOT running fine?如何设置系统来告诉我 cron 作业是否运行不正常? 【发布时间】:2011-03-27 15:51:13 【问题描述】:这更像是一个“通用架构”问题。如果您有一个定期运行的 cron 作业(甚至是 Windows 计划任务),让它向您发送一封电子邮件/短信告诉您一切正常,但 如何 当一切顺利时我如何得到通知不行吗?基本上,如果作业没有在预定的时间运行,或者 Windows / linux 有自己的一组挂起阻止任务运行......?
只是寻求以前遇到过这种情况的人的想法并提出有趣的解决方案......
【问题讨论】:
制作一个检查 cron 作业的 cron 作业:D 尽管很幽默,大卫,这不是个坏建议。单个 cron 作业可能因多种原因而失败,其中只有一个原因是整个 cron 子系统出现故障。 谢谢亚历克斯。 David / paxdiablo - 依赖“外部”/第 3 方 cron 服务是一个不错的选择……作为“cron-checker”? 我不会打扰。老实说,在我 30 年的职业生涯中,我认为 cron 本身失败的次数不多。我不确定我会在不太可能的事情上花费很多精力。但是,如果您真的想放心,请使用单独的 cron job 以确保其他作业正在运行,并且还让作业向另一台机器发送某种消息,也许使用它的 cron ( meta-cron) 以检查消息是否尚未到达。请记住,这会给您在其他情况下的误报(例如网络关闭)。你想要一个 meta-meta-cron 来关注它吗? :-) 【参考方案1】:我过去做过的一种方法是简单地放在每个脚本的顶部(例如,checkUsers.sh
):
touch /tmp/lastrun/checkUsers.sh
然后有另一个定期运行的作业,它使用find
来定位tmp/lastrun
中超过一天的所有“标记”文件。
您可以调整时间安排,使用 /tmp/lastrun/hour/
和 tmp/lastrun/day/
来分隔具有不同时间表的作业。
请注意,这不会捕获从未运行的脚本,因为它们永远不会为find
-ing 创建初始文件。为了缓解这种情况,您可以:
而且,如果您的 cron 作业不是脚本,请将 touch
直接放入 crontab
:
0 4 * * * ( touch /tmp/lastrun/daily/checkUsers ; /usr/bin/checkUsers )
验证一个简单的find
脚本比验证您的每一个cron
作业要容易得多。
【讨论】:
如果这是一个愚蠢的问题,请原谅我,但是如果一个 cron 失败了,他们是否都可能会失败(如果是硬件或软件错误)? 不一定,问题可能出在 crontab 文件中的行,也可能是脚本的权限。如果 cron 本身有问题,是的。然后你可以把它放在你的登录脚本中(或/etc/profile
或将一个 NFS 文件系统挂载到其他地方接触文件,希望它的 cron 将运行以进行检查)。但是,如果cron
本身不起作用,则几乎没有其他选项可以自动进行检查。在某些时候,您必须相信 一个 层的软件会正常运行 :-) 我并没有说它是万无一失的——它所做的只是让检测故障变得更容易。
有趣的方法...不是完全我正在寻找的...(更完整的解决方案,也可能使用外部系统)以上是关于如何设置系统来告诉我 cron 作业是不是运行不正常?的主要内容,如果未能解决你的问题,请参考以下文章
如何以用户而不是 root 用户身份运行 cron 作业 [关闭]