我们都知道处理 cron 作业输出的正确方法是将其重定向到文件:
0 * * * * /bin/date >> /var/log/date.log 2>&1
但是,有时管理员很懒惰、健忘或无知,不会输入这些重定向;在这种情况下,作业的输出将邮寄给 $MAILTO 或所有者用户或 root。在我管理的一些机器上,邮件被禁用,因此此输出进入黑洞。我想知道的是,有没有办法告诉 cron 接收任何作业输出,而不是邮寄,而是将其扔进某个万能日志文件中?我使用的是 Ubuntu(8.04,但正在迁移到 9.04)。这个解决方案的提示随机 Google 结果,但我认为 OP 可能对 cron 输出与 cron 作业的输出感到困惑。
我愿意接受涉及一些脚本或黑客攻击的解决方案,但理想情况下,这将是我可以在某处设置的配置位。我没有看到任何提示man cron
。谢谢!
答案1
对于cronie
cron(例如 Gentoo Handbook 推荐的),cron 调用有一个“-s”参数,它使用 syslog 将作业输出发送到系统日志。
答案2
简短的回答是不会,cron 会根据设计向 crontab 的所有者发送邮件。在标准 cron 中,没有办法更改这一点。
我能想到的最好的办法是在你想要这种行为的机器上配置 MTA,将邮件转储到日志文件而不是用户邮箱中。
答案3
我不确定您说的“邮件已禁用”到底是什么意思。但也许您可以设置一个/etc/aliases
指向管道的别名?比如
root: "|/bin/cat >> /var/log/cron.log"
答案4
我不知道什么是“标准 cron”。有很多 cron 守护程序,不同的发行版使用不同的守护程序。Vixie cron 部署最为广泛,所以这可能是你的意思。但在某些发行版中,它不是默认的。
我接手了狄龙的计划(dcron),这是 Arch Linux 上的默认设置。其他发行版也使用它,但我不知道它是否是其他地方的默认设置。dcron 有一个调用选项,-M
用于指定您想要使用自定义脚本而不是 sendmail。该脚本被调用时没有参数,并且带有一些电子邮件标题和&>
任何 cronjobs 的输出作为标准输入。(如果没有&>
输出,则不会调用该脚本。)