我正在做一个研究项目,需要我在 Ubuntu Linux 系统上监控 cron 作业。我收集了有关作业任务的数据,当它们开始时,我只是不知道有一种方法可以监控它们完成运行所需的时间。
我可以计算完成任务的时间减去以这样的方式启动它,但这需要在每个 cron 作业的 Shell 脚本上执行此操作。无论如何这并不一定很困难,但是cron不会以某种方式记录这个似乎有点愚蠢,所以我试图找到一种更简单的方法:P
tl;dr 计算出 cron 作业从开始到结束所花费的时间
你可以把它放在time
你的 crontab 前面,如果你收到关于 cron 脚本输出的通知,它会被发送给你。
例如,如果您有:
0 1,13 * * * /maint/run_webalizer.sh
time
在前面加上
0 1,13 * * * time /maint/run_webalizer.sh
你会得到一些看起来像的输出(“真实”是你想要的时间):
real 3m1.255s
user 0m37.890s
sys 0m3.492s
如果您没有收到 cron 通知,则可以将输出通过管道传输到文件。
man time
. 也许您可以创建一个包装器并告诉 Cron 将其用作您的“外壳”或类似的东西。
我使用 Jenkins CI 通过它的 external-monitor-job 插件来做到这一点。Jenkins 可以跟踪开始和结束时间,跟踪一段时间内的整体执行时间,保存它跟踪的所有作业的输出,并以图形方式呈现成功/失败条件。
https://wiki.jenkins-ci.org/display/JENKINS/Monitoring+external+jobs
Cronitor ( https://cronitor.io ) 是我专门为此目的而构建的工具。它使用 http 请求来记录工作的开始和结束。
如果您的作业未按计划运行,或者运行时间过长/过短,您将收到通知。您还可以将其配置为通过电子邮件、短信以及 Slack、Hipchat、Pagerduty 等方式向您发送警报。