Cron工作统一日志logging

我在服务器机器上有一系列的cron作业。 我知道我可以将他们的stdout / stderr输出redirect到一个文件。 如果我将几个cronjob输出redirect到同一个文件,那么即使某些作业可能同时运行,它也能工作吗?

不,他们很可能会相互覆盖。

作为一个简单的方法添加

[email protected]

在crontab的顶部,然后cron会通过电子邮件向您发送任何输出。

一个更复杂的方法可能涉及到build立先进先出的侦听,然后将这些脚本的输出发送到fifo。 这将需要一些照顾和处理,如果FIFO下降,那么你的cron作业将阻止写入。

说实话,我更喜欢除非有问题才输出任何东西的cron作业,在这种情况下MAILTO让我知道。

更简单的方法是将所有输出pipe道input到“logging器”工具并logging到系统日志,即

 * * * * * cronjob1.sh 2>&1 | logger -t cronjob1 * * * * * cronjob2.sh 2>&1 | logger -t cronjob2 

然后查看/ var / log / messages

缺点是这是广泛的机器,你必须是root才能看到日志,尽pipe可以用用户可访问权限设置单独的syslog文件。

看了这么多post之后,我发现cron没有统一的日志logging。 对于我们大多数人来说,企业工作负载计划不是一种select,最常见的build议是使用logging器和/或通过电子邮件发送脚本输出或将输出追加到文件。 有用的日志logging和警报是这些技术都无法实现的。 所以,我写了一个Perl脚本,我在GitHub上共享,解决了:

  • 电子邮件日志logging/警报:有问题,因为如果你的脚本嘈杂,它会给你发垃圾信息,你将不再关注这些电子邮件

  • logging器:logging到系统日志 – 你怎么知道你的脚本是成功还是失败? 是否没有指示成功的错误?

  • logging到文件 – 与logging器相同,但意味着您必须设置自己的日志循环

  • 在发生特定故障时发出警报(非零退出代码,由于捕获信号而退出,在STDERR / STDOUT上输出)

一探究竟。 它的工作原理和免费: https : //github.com/ttubiak/utils/blob/master/bs

它被称为“BS”(保姆),欢迎您使用它/采用它。 总之,这是一个“父母”脚本,将您的程序作为subprocess运行。 你告诉它要运行什么,如果你的脚本遇到问题,它会为你运行有意义的日志logging和标志文件生成。 它通过附加到你的程序的STDOUT和STDERR,并等待你的程序完成运行。 当bs启动你的程序时,它会使用syslog来这么说,当你的程序/脚本写入STDOUT / ERR时,它会把它logging到syslog中,如果你select的话,写入一个你可以监控的文件。 如果你编程死了,它会自然地通过系统日志logging这个信息,并创build一个你可以监视的标志文件。 另外,它会通过系统日志logging一行统计信息,所以你知道你的代码运行需要多长时间。 有一些更高级的事情可以和Nagios支票一起做,我打算及时发布。