cron是否可以*默认*(而不是邮件)将作业输出写入日志?


23

我们都知道处理cron作业的输出的正确方法是将其重定向到文件:

0 * * * * /bin/date >> /var/log/date.log 2>&1

但是,有时管理员会变得懒惰,健忘或无知,因此不会进行重定向。在这种情况下,作业的输出将邮寄到$ MAILTO或拥有的用户或root。在我管理的某些机器上,邮件被禁用,因此此输出进入了一个黑洞。我想知道的是,有什么方法可以告诉cron接受任何作业输出,而不是通过邮件将其发送到某个地方的所有日志文件中吗?我正在使用Ubuntu(8.04,但要迁移到9.04)。在Google的随机结果中有这样一种解决方案的暗示,但我认为OP可能对cron输出与cron作业的输出感到困惑。

我对涉及脚本或黑客攻击的解决方案持开放态度,但理想情况下,这是我可以在某处设置的配置位。我没有看到任何提示man cron。谢谢!

Answers:



3

简短的答案是“否”,cron会按设计将邮件发送给crontab的所有者。在标准cron中,无法更改此设置。

我能想到的最好的方法是在您希望此行为将邮件转储到日志文件而不是用户邮箱的计算机上配置MTA。


3

当您说“邮件已禁用”时,我不确定您的意思是什么。但是,也许您可​​以在/etc/aliases指向管道的地方设置别名?就像是

root: "|/bin/cat >> /var/log/cron.log"

root: /var/log/cron.log不起作用? feep.net/sendmail/tutorial/intro/aliases.html
endolith,2012年

对我也没有任何帮助。
endolith

仅当您将sendmail作为MTA运行时,这些才可能起作用。这变得越来越少见。(是的,我知道我要回复一个5岁的评论!)
亚历克斯L

2

我不认为您要求的是使用Ubuntu(或任何其他)cron实际上可能实现的。

除了geekmonkeys的想法外,您还可以将$ MAILTO设置本地帐户,并通过procmail路由输出。


1

从来没有听说过cron这样的设置,所以我会选择脚本编写路线。

创建一个cron作业以巡逻/ var / spool / cron / *,并将重定向附加到任何没有该作业的作业。


1

另一个选择是创建一个名为cron_wrapper的shell脚本,或者执行以下操作:

#!/ bin / sh

评估“ $ * >> /var/log/cronlog.log”
退出$?

然后,您所有的crontab都只需要这样的东西:

* * * * * / usr / local / bin / cron_wrapper回声你好

注意我还没有测试这段代码,这只是一个想法。


1
那不能解决问题。如果人们不记得设置MAILTO或将stdout重定向到文件,那么他们就不会记住要通过包装程序运行内容。
卡米尔·基西尔

1

我不知道什么是“标准cron”。cron守护程序很多,不同的发行版使用不同的守护程序。Vixie cron部署最广泛,所以这可能就是您的意思。但是在某些发行版中,它不是默认设置。

我已经接管了Dillon的cron(dcron)的开发,这是Arch Linux上的默认设置。其他发行版也使用它,但是我不知道它是否是其他地方的默认设置。dcron有一个调用选项,-M用于指定您要使用自定义脚本而不是sendmail。该脚本将不带任何参数调用,并带有几个电子邮件头和&>任何cronjobs 的输出,如stdin。(如果没有&>输出,则不会调用该脚本。)


1

我们为什么不在特定用户的crontab中设置MAILTO =“”。这将禁用/ var / spool / mail /中的邮件记录

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.