Linux定时任务一直产生邮件问题
问: 我有一些cron作业在Linux系统上隔夜运行。如果需要查看,这些作业中的每一个都会将信息输出到文本文件中。有些被编写为通过mail命令发送电子邮件。
但是,由于我将这些脚本放在了新系统上并添加到了crontab中,因此我收到了有关运行的每个作业的电子邮件。根目录发送的电子邮件过多。有没有办法停止这种行为?
答: Crond通常在执行cron作业时发送电子邮件。它使用/ etc / crontab中的MAILTO变量来确定谁接收电子邮件,默认情况下该用户是root。有几种方法可以停止此行为。
1.将MAILTO变量更改为空白。
您可以编辑/ etc / crontab文件,并将MAILTO变量更改为以下内容:
MAILTO=""
这将有效地禁用来自cron守护程序的所有电子邮件。然后,您可以在脚本中决定使用mailx命令或您选择的命令发送邮件。
这不是我的首选方法,因为当cronjob出现错误时,我希望接收电子邮件。
2.将STDOUT和STDERR重定向为null以抑制输出。
通过抑制脚本的输出,crond可以发送任何内容。
将以下内容添加到crontab条目中,以将所有输出(STDERR和STDOUT)发送到/ dev / null。例如:
/dev/null 2>&1
0 5 * * * /example/script >/dev/null 2>&1
这也有缺点,因为您将抑制所有可能有助于调试脚本问题的错误。
3.配置crond将脚本输出发送到系统日志,并禁用发送输出邮件。
您可以通过编辑/ etc / sysconfig / crond文件并更改CRONDARGS行来配置crond。添加“ -s”参数会将输出发送到系统日志,添加“ -m off”参数将禁止crond发送作业输出的电子邮件。
例如:您将必须重新启动crond服务以读取新的参数:
[root@centos7 ~]# cat /etc/sysconfig/crond
Settings for the CRON daemon.
CRONDARGS= : any extra command-line startup arguments for crond
CRONDARGS=-s -m off
systemctl restart crond.service
当作业运行时,以上任何一种方法都可以完全抑制来自cron守护程序的电子邮件。这在我看来并不理想,因为如果我的cron作业出现错误,我想得到通知。我更喜欢写我的脚本以不产生任何输出(没有标准输出,但仍然输出错误),或者只将STDOUT重定向到/ dev / null。如果发生错误,这将导致crond仅发送电子邮件。
仅仅重定向STDOUT的示例:
0 5 * * * /example/script > /dev/null
这就是我看到的解决方案
改写一下配置就可以了 当然你也可以在每行任务中添加。
看到这个的时候 我也是才明白 fastadmin中推荐的 定时任务的格式 为什么是
-
-
-
-
- /usr/bin/php /www/yoursite/public/index.php /addons/crontab/autotask/index > /dev/null 2>&1 &
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null
- /usr/bin/php /www/yoursite/public/index.php /addons/crontab/autotask/index > /dev/null 2>&1 &
-
-
-
可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.
偶尔也可以把 & 在命令的最后加上,表示让程序后台执行。

浙公网安备 33010602011771号