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

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

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

然而,有时pipe理员是懒惰的,健忘的,或无知的,不要把这些redirect; 在这种情况下,作业的输出被邮寄给$ MAILTO或拥有的用户或根。 在我pipe理的一些框中,邮件被禁用,所以这个输出进入黑洞。 我想知道的是,有没有办法告诉cron采取任何工作输出,而不是邮寄,把它扔进一个全面的日志文件的地方? 我使用Ubuntu(8.04,但迁移到9.04)。 在Google的这个随机结果中有一个这样的解决scheme,但我认为OP可能对cron输出和cron作业的输出感到困惑。

我接触到一些涉及一些脚本或黑客攻击的解决scheme,但理想情况下,这将是我可以在某处设置的一个configuration位。 我在man cron中看不到任何提示。 谢谢!

简短的回答是不,cron通过devise邮寄给crontab的所有者。 在标准的cron中没有办法改变这个。

我能想到的最好的方法是在要将此邮件转储到日志文件而不是用户邮箱的计算机上configurationMTA。

当你说“邮件被禁用”时,我不确定你的意思。 但是,也许你可以在/etc/aliases中设置一个指向pipe道的/etc/aliases ? 就像是

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

我不认为你要求的是Ubuntu(或任何其他)的cron。

除了geekmonkeys的想法,你也可以设置$ MAILTO到本地帐户,并通过procmail路由输出。

从来没有听说过cron这样的设置,所以我会采取脚本路线。

创build一个cron作业来巡逻/ var / spool / cron / *,并将redirect附加到任何没有的作业。

另一个select是创build一个名为cron_wrapper的shell脚本或者其他东西,并且只需要执行如下操作:

 #!/ bin / sh的

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

那么,你所有的crontabs只需要这样的东西:

  * * * * * / usr / local / bin / cron_wrapper echo hello 

注意我没有testing这个代码,这只是一个想法。

我不知道什么是“标准cron”。 有很多的cron守护进程,不同的发行版使用不同的。 Vixie cron被广泛部署,所以这可能是你的意思。 但是在一些发行版中,这不是默认的。

我接pipe了Arch Linux上默认的Dillon cron (dcron)的开发。 其他发行版也使用它,但我不知道它是否是其他地方的默认设置。 dcron有一个调用选项-M来指定你想使用一个自定义脚本而不是sendmail。 脚本被调用时没有参数,并且有一些电子邮件头和任何cronjob的输出作为stdin。 (如果没有&>输出,脚本不会被调用。)

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