停止从电子邮件发送cron错误的Linux?

今天我设置ssmtp从sendmail给我发电子邮件。 然而我没有想到的是,像cron这样的应用程序会给我发电子邮件。

在备份数据库之前,我的一个cron脚本尝试创buildpath/年/月/,并且由于年和月已经存在,我得到了电子邮件

From: Root Subject: Cron <root@myserver> /path/scripts/mysqlbackup.sh mkdir: cannot create directory `2010': File exists mkdir: cannot create directory `09': File exists 

我如何让它停止? 它只有一个小时,所以如果这是唯一的错误,我只是简单地修复脚本。

默认情况下,cron将邮件发送给cronjob的输出消息。 更具体地说,它保存了一个cronjob的stdout(标准输出)和stderr(标准错误输出),并将其作为crontab的所有者或者crontab中的MAILTOvariables中命名的用户。

为了防止输出到达您,您必须确保stdout和stderr不被保存,而是写入文件或/ dev / null。

你可以在作业定义中使用类似的东西来做到这一点:

 job.sh > /dev/null 2>&1 

这将stdoutredirect到/ dev / null('> / dev / null'部分),并将stderrredirect到stdout,从而也redirect到/ dev / null('2>&1'部分)。 奇怪的语法,对不对? 😉

高级Bash脚本指南有更多关于I / Oredirect的信息 。

另外,根据vixie-cron在RHEL4和RHEL5上的说明,您可以将MAILTO保留为空(即在crontab中定义MAILTO =“”),并且不会得到任何邮件。

作为redirect脚本输出的替代scheme,您可以通过设置MAILTO来更改crontab文件的邮件目标,例如。 MAILTO=nobody

解决问题不是通知,

这会让你陷入一个坏习惯,把所有的通知都发送到/ dev / null,而且这个sods law就是这样,你会错过一些重要的东西。

在命令的末尾添加> /dev/null 2>&1 &

例如

 /directory/script.sh > /dev/null 2>&1 &