我正在运行 CentOS 5.5。
我们有几个 cronjobs 存储在 /etc/cron.daily/ 中。我们希望其中一些 cronjobs 的电子邮件发送到特定的电子邮件地址,而 /etc/cron.daily/ 中的其余电子邮件应发送到默认电子邮件地址 (root@localhost)。
/etc/cron.daily/ 中的 Cronjobs 从 /etc/crontab 文件运行。 /etc/crontab 指定“MAILTO”字段。我可以通过在 /etc/cron.daily/foo cronjob 中设置 MAILTO 来覆盖它吗?
处理这个问题的最佳方法是什么?
答案1
设置[email protected]
不起作用/etc/cron.daily/foo
。脚本输出未发送到[电子邮件受保护]。
页面位于http://www.unixgeeks.org/security/newbie/unix/cron-1.html还提出了一个简单的解决方案:
该文件/etc/cron.daily/foo
现在包含以下内容:
#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" [email protected]
这将发送一封电子邮件至 '[电子邮件受保护]' 的主题等于脚本的完整路径(例如/etc/cron.daily/foo
)。
Unixgeeks.org 对此是这么说的:
cron 的输出
正如我之前所说,cron 的输出会被邮寄给进程的所有者或 MAILTO 变量中指定的人,但如果您不希望这样怎么办?如果您想将输出邮寄给其他人,只需将输出通过管道发送到命令邮件即可。例如
cmd| mail -s“邮件主题”用户
有时,我只想从 cronjob 接收错误,而不是标准输出,所以我使用这个技巧。乍一看语法可能有问题,但请放心它是有效的。以下 cronjob 将发送 STDOUT 到 /dev/null,然后通过管道处理 STDERR。
doit 2>&1 >/dev/null | mailx -s "$0" [email protected]
同样的事情,但发送到系统日志:
doit 2>&1 >/dev/null | /usr/bin/logger -t $ME
另请参阅我在 ServerFault 上的回答Cronjob stderr 到文件和电子邮件
答案2
更优雅的解决方案是/etc/cron.d
直接使用。不要将脚本放在 中/etc/cron.daily
,而是将其放在类似的位置/usr/local/sbin/myscript.sh
,然后创建文件/etc/cron.d/myscript
如下:
MAILTO=root,[email protected]
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh
这也让您可以更好地控制工作何时发生;例如仅在某些工作日等。请参阅该crontab(5)
人以获取更多信息。
答案3
假设您在此计算机上具有 SA 访问权限,您可以创建一个新的用户帐户,将任务添加到该帐户的 cron 任务中。然后可以使用该帐户主文件夹中的 .forward 文件转发该用户的邮件。如果 cron 任务需要特权访问,您可能必须为此用户设置权限。
这个或 Stefan 的答案是否最适合实际上取决于您在设置时想要多少麻烦,以及您是否希望将错误消息发送到根电子邮件或通常监视每日输出的人员。
祝你好运