我在服务器机器上有一系列的cron作业。 我知道我可以将他们的stdout / stderr输出redirect到一个文件。 如果我将几个cronjob输出redirect到同一个文件,那么即使某些作业可能同时运行,它也能工作吗?
不,他们很可能会相互覆盖。
作为一个简单的方法添加
在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支票一起做,我打算及时发布。