监视cron任务的技巧?

有没有很好的技术来监控群集上的cron任务?

我们开始每天使用cron来启动任务。 关于检查信息的一些想法:

  1. 添加特殊的应用程序处理,将信息logging到一些“networking感知”的地方,如数据库
  2. build立一个日志文件系统,定期传输cron日志到一个中心点进行处理/查询(以及其他可能的日志文件)

我想知道人们是否已经成功地将cron与其他东西分开处理,或者如果这些任务被完全整合到另一种方法中。 我倾向于#2,但我想知道更多有经验的人可能会尝试。

除了其他的答案:

  • 当作业完成时,让作业将时间戳记写入文件,以及实际作业的返回值
  • 将返回值传播回原来的调用者

我们首先使Nagios ( Icinga )更容易检查,例如,如果最后写入的时间戳大于n小时(加上您需要的任何逻辑) – 我们知道出了问题。

我常见的做法是:

  • 当您的cron'ed应用程序成功完成时,不要生成任何标准输出。
  • 不要将任何输出传递给/ dev / null。
  • 当出现问题时,做出有意义的标准错误输出。
  • 在crontab中设置$ MAILTO地址,将错误输出发送给所需的团队。

除以上内容外:

  • 当出现问题时,请一边拨打“logging器”一边写信给stderr。 将syslogconfiguration为另外转发到中央主机,即“loghost”。 (logging器默认使用“user.notice”工具,但可以更改它。)

有几种技术可以用来监控cronjobs。

要接收cronjob失败的警报:

  • 使用cron的标准MAILTO =函数。 如果cronjob在STDERR上产生输出,它将被邮寄到你select的地址。
  • 跟踪和处理cron邮件,你可以引导他们进入票务系统。

您build议将信息logging到“networking感知”位置的系统听起来像系统日志 。 syslog提供了一个创build日志的简单方法,它通常pipe理诸如/ var / log / messages的文件。 您可以进行基本的自定义,例如select哪些文件接收日志消息。

系统日志可以在networking感知模式下启动。 例如,您可以对其进行configuration,以便从站可以login到主站:

 [root@slave ~]# echo "hello world from slave" | logger -p local1.info [root@master ~]# tail /var/log/myapp Jun 29 13:07:01 192.168.1.2 logger: hello world from slave 

对于基于Red Hat的发行版,示例configuration如下所示:

 [root@slave ~]# cat /etc/syslog.conf | grep local1 local1.* @192.168.1.3 [root@master ~]# cat /etc/sysconfig/syslog | grep SYSLOGD_OPTIONS SYSLOGD_OPTIONS="-m 0 -r" [root@master ~]# cat /etc/syslog.conf | grep local local1.* /var/log/myapp 

(第一个configuration行将local1。*日志通知redirect到@ 192.168.1.3(“master”)。第二个SYSLOGD_OPIONS行的-r标志打开networking支持。最后,第三个configuration行指示在master上收到的local1。*消息。成文件)。

系统日志方法更适合只logging错误/信息。 日志文件比电子邮件的可见性要低,所以除非出现问题,否则您可能不会查看日志。

如果您select使用syslog风格路由,请考虑使用syslog-ng: http : //freshmeat.net/projects/syslog-ng/ 。

当然,你可以同时使用这两种技术。 例如,syslog既有失败也有成功,只是邮寄失败。

在我写这篇文章的时候,这个问题还处在相当繁重的发展阶段,但是我build议大家看一下https://github.com/jamesrwhite/minicron 。 它的开发是为了解决你所描述的问题。 通过对运行命令的轻微修改,可以logging作业的输出和退出状态,并将数据实时发送回中央服务器,并可在作业失败时通过电子邮件,短信和PageRDuty发送警报(退出状态> 0)或者在应该的时候不执行。

免责声明:我是开发人员。

我发布了一个类似的问题StackOverflow的答案( https://stackoverflow.com/questions/21025495/system-for-monitoring-cron-jobs-and-automated-tasks

Cronitor( https://cronitor.io )是我为此build立的工具。 基本上归结为使用http请求作为ping的跟踪信标。

然而,OP在他的评论中提到的需求之一就是在工作开始时需要被告知需要太长的时间来运行。

我也有同样的需求,发现类似的工具并不能轻易支持这种types的监控。 Cronitor通过允许您可选地触发开始事件和结束事件来解决这个问题,以便跟踪持续时间。

持续时间跟踪对我来说是必须的,因为我有一个计划每小时一个cronjob,但随着时间的推移开始超过一个小时运行。 希望你觉得它有用!

您的cron作业已经通过sysloglogging。 该数据可以使用另一个标准服务syslogd发送到中央服务器。

http://www.debuntu.org/how-to-remote-syslog-logging-on-debian-and-ubuntu/详细介绍了如何设置。

这看起来像AlertGrid的经典用例。

它不需要安装,所有您需要从这个工具中获益的方法是:

  1. 发送信号到AlertGrid每次你的cron作业完成它的工作(这可以通过极端简单的API来完成,信号只是一个HTTP请求)。 你也可以发送一些参数像execution_time
  2. 设置如下的通知规则:

如果my_job在X分钟内没有响应(在你的情况下是小时) – >发送短信给pipe理员

要么

如果execution_time> 60秒 – >发送电子邮件给感兴趣的人

其实就是这样。 您可以使用漂亮的可视化编辑器pipe理通知规则 如果有更改,您不必修改源代码或某些configuration文件。 这是集中的解决scheme,所以你可以从一个地方pipe理规则中受益。

希望这有助于某人。 有一个免费的帐户提供,所以你可以testing和使用AlertGrid,如果你有兴趣。 我是AlertGrid团队成员之一 – 随时询问你是否有一些问题。

我使用http://cronrat.com只是追加&&curl“…您的cronraturl”您的cron作业。 我喜欢的最好的function是你创build初始帐户后不需要设置任何东西。 每个警报在您使用它的一分钟后就会启动并运行。 因此,我可以使用任何自动化工具来启动我目前还不存在的工作,而不像某些需要首先设置工作的服务。

在这些精确的需求之后,我创造了Power Cron 。 我需要集中观察我的cron作业,以及不同集群成员之间的依赖关系。

我还需要比我能在日志中find的更多信息,并添加了作业分析。