Cron 作业统一日志记录

Cron 作业统一日志记录

我在服务器上有一系列 cron 作业。我知道我可以将它们的 stdout/stderr 输出重定向到一个文件。如果我将多个 cron 作业输出重定向到同一个文件,即使某些作业可能同时运行,这是否可行?

答案1

不,它们可能会互相覆盖。

作为一种简单的方法添加

[email protected]

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

更复杂的方法可能涉及设置cronolog对 FIFO 的监听,然后将这些脚本的输出发送到 fifo。这需要一些小心和处理,如果 FIFO 出现故障,那么您的 cron 作业将阻止写入它。

说实话,我更喜欢 cron 作业,除非出现问题,否则不会输出任何内容,在这种情况下MAILTO会通知我。

答案2

更简单的方法是将所有输出导入“logger”工具并记录到系统日志,即

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

然后查看 /var/log/messages

缺点是这是机器范围的,您必须以 root 身份才能查看日志,尽管可以设置具有用户可访问权限的单独 syslog 文件。

答案3

在阅读了许多类似这样的帖子后,我发现 cron 没有统一的日志记录。对于我们大多数人来说,企业工作负载计划不是一种选择,最常见的建议是使用记录器和/或通过电子邮件发送脚本输出或将输出附加到文件。有用的日志记录和警报是这些技术都无法实现的。因此,我编写了一个 Perl 脚本,并在 GitHub 上分享,解决了以下问题:

  • 电子邮件记录/警报:有问题,因为如果你的脚本很吵,它会向你发送垃圾邮件,你将不再关注这些电子邮件

  • 记录器:记录到系统日志 - 你如何知道你的脚本是成功还是失败?没有错误就代表成功吗?

  • 记录到文件 - 与记录器相同,但意味着您必须设置自己的日志轮换

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

看看吧。它有效而且免费:https://github.com/ttubiak/utils/blob/master/bs

它被称为“BS”(保姆),欢迎您使用/采用它。总之,它是一个“父”脚本,将您的程序作为子进程运行。您告诉它要运行什么,如果您的脚本遇到问题,它将为您运行它,并进行有意义的日志记录和标志文件生成。它的工作原理是将自身附加到程序的 STDOUT 和 STDERR 并等待程序完成运行。当 bs 启动您的程序时,它将使用 syslog 来表示,当您的程序/脚本写入 STDOUT/ERR 时,它会将其记录到 syslog 中,如果您选择这样做,它会写入您可以监视的文件。如果您的程序死机,它自然会通过 syslog 记录此信息并创建一个您可以监视的标志文件。此外,它还会通过 syslog 记录一行统计信息,以便您知道代码运行需要多长时间。它可以与 Nagios 检查结合使用更高级的功能,我打算及时发布。

相关内容