【问题标题】:cron jobs: Monitor time it takes for jobs to finishcron 作业:监控作业完​​成所需的时间
【发布时间】:2012-08-15 17:41:42
【问题描述】:

我正在做一个研究项目,需要我在 Ubuntu Linux 系统上监控 cron 作业。我收集了有关作业任务的数据,当它们开始时,我只是不知道有一种方法可以监控它们完成运行所需的时间。

我可以计算完成任务减去启动它的时间with something like this 但这需要在每个 cron 作业的 Shell 脚本上执行此操作。无论如何这并不一定很困难,但是cron不会以某种方式记录这个似乎有点愚蠢,所以我试图找到一种更简单的方法:P

tl;dr 计算 cron 作业从开始到结束所花费的时间

【问题讨论】:

  • 很多服务内容是特定于版本的,尤其是cron。 14.04 和 16.04 做的不同,升级到 16.04 的 14.04 系统更像是 14.04 系统。除非明确说明正在讨论的确切系统类型,否则很难回答这个问题。

标签: linux shell ubuntu cron


【解决方案1】:

您可以将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 通知,您可以将输出通过管道传输到文件。

【讨论】:

  • 这看起来可行!我的问题可能是由于对 Linux/Shell/等的愚蠢缺乏经验,但我还需要知道一件事……因为这些任务在没有我创建它们的情况下运行(它们是我机器上添加的默认任务) /etc/crontab),这会在哪里打印出来让我看?这项工作会自动打开终端吗?谢谢你:)
  • @connergdavis 我喜欢说,通常 cron 实现会将打印出的内容(标准输出)从 cron 作业通过电子邮件发送到 root 或某个管理员电子邮件地址。如果您没有类似的设置,您可以尝试将> 输出到文件:time /maint/run_webalizer.sh > /maint/webalizer_out
  • 哦,好吧,太棒了。非常感谢! :D
  • 时间信息被打印成标准错误,所以你想这样做......2>/maint/webalizer_out
  • 如果你想要程序输出和定时输出,就像它在终端上显示的那样,那么你会想要使用&>maint/webalizer_out
【解决方案2】:

man time。也许您可以创建一个包装器并告诉 Cron 将其用作您的“外壳”或类似的东西。

【讨论】:

  • 注意接受答案后的 cmets。 &> 是捕获所有内容的方式,就像在终端窗口中运行一样。
【解决方案3】:

我使用 Jenkins CI 通过其 external-monitor-job 插件来执行此操作。 Jenkins 可以跟踪开始和结束时间,跟踪一段时间内的总体执行时间,保存它跟踪的所有作业的输出,并以图形方式呈现成功/失败条件。

https://wiki.jenkins-ci.org/display/JENKINS/Monitoring+external+jobs

【讨论】:

    【解决方案4】:

    Cronitor (https://cronitor.io) 是我专门为此目的而构建的工具。它使用 http 请求来记录工作的开始和结束。

    如果您的作业未按计划运行,或者运行时间过长/过短,您会收到通知。您还可以将其配置为通过电子邮件、短信以及 Slack、Hipchat、Pagerduty 等方式向您发送警报。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 2015-06-23
      相关资源
      最近更新 更多