/etc/cron.daily/foo:发送电子邮件给特定用户而不是root用户?


13

我正在运行CentOS 5.5。

我们在/etc/cron.daily/中存储了几个cronjobs。我们希望将其中某些cronjob的电子邮件发送到特定的电子邮件地址,而/etc/cron.daily/中的其余电子邮件应发送到默认电子邮件地址(root @ localhost)。

/etc/cron.daily/中的Cronjobs是从/ etc / crontab文件运行的。/ etc / crontab指定一个“ MAILTO”字段。我可以通过在/etc/cron.daily/foo cronjob中设置MAILTO来覆盖它吗?

处理此问题的最佳方法是什么?


CentOS 6.5(cronie)用户注意:/etc/crontab未指定默认值。
亚当·蒙森

Answers:


13

设置MAILTO=user@example.org/etc/cron.daily/foo不工作。脚本输出未发送到user@example.org。

http://www.unixgeeks.org/security/newbie/unix/cron-1.html上的页面还提出了一种简单的解决方案:

该文件/etc/cron.daily/foo现在包含以下内容:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" stefanl@example.org

这将向'stefanl@example.org'发送一封电子邮件,其主题等于脚本的完整路径(例如/etc/cron.daily/foo)。

这是Unixgeeks.org关于此内容的内容:

cron的输出

正如我之前说过的,cron的输出被邮寄到进程的所有者或MAILTO变量中指定的人,但是如果您不希望这样做,该怎么办?如果要将输出通过邮件发送给其他人,则只需将输出通过管道发送到命令邮件。例如

cmd | mail -s“邮件主题”用户

有时,我只想从cronjob接收错误,而不是从stdout接收错误,因此我使用了这个技巧。语法乍看之下可能看起来不对,但请放心,它确实有效。以下cronjob将STDOUT发送到/ dev / null,然后通过管道处理STDERR。

doit 2>&1 >/dev/null | mailx -s "$0" stefanl@example.org

同样的事情,但是发送到系统日志:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

另请参阅我在ServerFault上对Cronjob stderr的回答以归档和发送电子邮件


6

一个更优雅的解决方案是/etc/cron.d直接使用。不用将脚本放在中/etc/cron.daily,而是将其放在类似的位置/usr/local/sbin/myscript.sh,然后将文件创建/etc/cron.d/myscript为:

MAILTO=root,whomever@example.org
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

这也使您可以更好地控制何时进行工作。例如仅在某些工作日等。有关crontab(5)更多信息,请参阅此人。


0

假设您在此计算机上具有SA访问权限,则可以创建一个新的用户帐户,并将任务添加到该帐户中的cron任务。然后可以使用此帐户主文件夹中的.forward文件转发此用户的邮件。如果cron任务需要特权访问,则可能必须为此用户设置权限。

这是最合适的答案还是Stefan的答案最合适,实际上取决于您要设置它的麻烦程度,以及是否希望将错误消息发送到根电子邮件或通常监视每日输出的人员。

祝好运

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.