服务器是Debian 6.0。在 /etc/aliases 中我有;
root: [email protected]
这样根电子邮件就会直接发送给我。今天,我放入 /etc/cron.monthly 的每月脚本已通过电子邮件将其输出发送给我。这是一个相当简单的脚本,如下所示;
#!/bin/bash
cd /a/directory
rm -rf ./*
wget http://www.site.com/fresh-copy.zip
unzip fresh-copy.zip
rm fresh-copy.zip
我收到的电子邮件如下;
**Subject**: Cron <root@myserver> test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
**From**: [email protected]
**Body**:
/etc/cron.monthly/speedtest:
--2013-03-01 06:52:01-- http://www.site.com/fresh-copy.zip
Resolving www.site.com... 11.22.33.44
Connecting to www.site.com|11.22.33.44|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 99763924 (95M) [application/zip]
Saving to: `fresh-copy.zip'
0K .......... .......... .......... .......... .......... 0% 11.7M 8s
50K .......... .......... .......... .......... .......... 0% 11.3M 8s
100K .......... .......... .......... .......... .......... 0% 11.4M 8s
*CUT OUT FOR BREVITY*
97350K .......... .......... .......... .......... .......... 99% 16.9M 0s
97400K .......... .......... ..... 100% 11.6M=9.7s
2013-03-01 06:52:11 (9.78 MB/s) - `fresh-copy.zip' saved [99763924/99763924]
Archive: fresh-copy.zip
inflating: file1.ext
inflating: file2.ext
inflating: file3.ext
inflating: file4.ext
inflating: file5.ext
此电子邮件中的唯一输出来自wget
andunzip
命令。我可以编辑脚本并将其放在> /dev/null
这两行的末尾,但这真的是最好的方法吗?如果我向生成输出的脚本添加更多命令,我将始终需要添加> /dev/null
到每一行。有没有办法可以禁用此 cron 脚本输出的电子邮件通知?
答案1
我建议您继续> /dev/null
在脚本中使用(或使用和-q
的选项)。这样,如果其中一个命令抛出错误,这些错误仍然会通过电子邮件发送给您,但正常输出将被抑制。wget
unzip
答案2
一种更简单的方法是将脚本添加到老式的 crontab 中,而不是将脚本添加到 cron.monthly 目录中,您可以在 crontab 行上指定希望输出转到 /dev/null。像这样:
crontab -e
编辑 crontab。然后添加以下行:
@monthly /path/to/script > /dev/null
这意味着 STDOUT 被重定向到 /dev/null,但 STDERR 仍然会出现在电子邮件中。如果您也不想收到错误邮件,则该行应如下所示:
@monthly /path/to/script > /dev/null 2>&1
答案3
我一直在使用cronic
有一段时间,它从来没有让我失望过。
本质上,它是 cron 的包装脚本,只有在出现错误返回代码或 stderr 中存在某些内容时,它才会向您发送电子邮件。这样,您就不会在每次 cron 运行时收到垃圾邮件,但在出现问题时仍然会收到通知。
要使用它,请下载 cronic 脚本并更改 cron 命令(例如)
* * * * * awesome_command
到
* * * * * /path/to/cronic awesome_command
答案4
如果您只想“静音”此脚本,您可以将/dev/null 2>&1
其放在 crontab 文件中调用文件的行末尾。使用这种方法,您不能将脚本放在每月文件夹中,您需要使用以下命令编辑 crontab 文件:
contab -e
或者您可以编辑 cron 配置并从中删除您的邮件。每件事都有解释这里。