阻止 Linux 通过电子邮件向我发送 cron 错误?

阻止 Linux 通过电子邮件向我发送 cron 错误?

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

在备份数据库之前,我的一个 cron 脚本尝试创建路径/年份/月份/,由于年份和月份已经存在,因此我收到了电子邮件

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

我该如何让它停止?它只运行了一个小时,所以如果这是唯一的错误,我只需修复脚本即可。

答案1

默认情况下,cron 会通过电子邮件向您发送 cronjob 的输出消息。更具体地说,它会保存 cronjob 的 stdout(标准输出)和 stderr(标准错误输出),并通过电子邮件将其发送给 crontab 的所有者或 crontab 中 MAILTO 变量中指定的用户。

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

您可以通过在作业定义中使用类似这样的内容来实现这一点:

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

这会将 stdout 重定向到 /dev/null(“> /dev/null”部分),并将 stderr 重定向到 stdout,从而也重定向到 /dev/null(“2>&1”部分)。语法很奇怪,对吧?;-)

高级 Bash 脚本指南还有更多有关 I/O 重定向的信息

或者,您可以将 MAILTO 留空(即,在您的 crontab 中定义 MAILTO=""),这样您将不会收到任何邮件,根据 RHEL4 和 RHEL5 上 vixie-cron 的手册页。

答案2

作为重定向脚本输出的替代方法,您可以通过设置来更改 crontab 文件的邮件目的地MAILTO,例如。MAILTO=nobody

答案3

修复问题而不是通知,

这会让你养成将所有通知发送到 >/dev/null 的坏习惯,而且,糟糕的是,你会错过一些重要的东西。

答案4

附加> /dev/null 2>&1 &到命令末尾

例如

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

相关内容