我正在运行 CentOS 5.5。
我们有几个 cronjob 存储在 /etc/cron.daily/ 中。我们希望其中一些 cronjob 的电子邮件发送到特定的电子邮件地址,而 /etc/cron.daily/ 中的其余电子邮件应发送到默认电子邮件地址 (root@localhost)。
/etc/cron.daily/ 中的 Cronjobs 从 /etc/crontab 文件运行。/etc/crontab 指定了“邮件”字段。我可以通过在我的 /etc/cron.daily/foo cronjob 中设置 MAILTO 来覆盖它吗?
处理这个问题的最佳方法是什么?
Ste*_*ski 14
设置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
Run Code Online (Sandbox Code Playgroud)
这将向“stefanl@example.org”发送一封电子邮件,其主题等于脚本的完整路径(例如/etc/cron.daily/foo
)。
以下是 Unixgeeks.org 对此的评论:
来自 cron 的输出
正如我之前所说,cron 的输出会被邮寄给进程的所有者,或者 MAILTO 变量中指定的人,但如果您不想要怎么办?如果您想将输出通过邮件发送给其他人,您可以将输出通过管道发送到命令邮件。例如
命令行 | mail -s "邮件主题" 用户
有时,我只想从 cronjob 接收错误,而不是 stdout,所以我使用这个技巧。乍一看,语法可能有误,但请放心,它确实有效。下面的 cronjob 会将 STDOUT 发送到 /dev/null,然后将通过管道处理 STDERR。
doit 2>&1 >/dev/null | mailx -s "$0" stefanl@example.org
Run Code Online (Sandbox Code Playgroud)
同样的事情,但发送到系统日志:
doit 2>&1 >/dev/null | /usr/bin/logger -t $ME
Run Code Online (Sandbox Code Playgroud)
另请参阅我在 ServerFault 上对Cronjob stderr 文件和电子邮件的回答
小智 7
更优雅的解决方案是/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
Run Code Online (Sandbox Code Playgroud)
这也使您可以更好地控制工作何时发生;例如仅在某些工作日等。有关crontab(5)
更多信息,请参阅该男子。
归档时间: |
|
查看次数: |
25076 次 |
最近记录: |