在用户crontab中于任务行正上方写MAILTO=""可精准关闭该任务的默认错误邮件,必须用双引号空字符串,不可用于系统级配置以防全局静默。

直接在 crontab 条目前加 MAILTO="",就能让该行任务完全不发默认错误邮件——这是最轻量、最精准的收敛方式,无需动系统级配置,也不影响其他任务。
只对单个任务关闭邮件通知
在用户自己的 crontab(crontab -e)中,MAILTO 必须写在具体任务行的正上方,且仅对该行生效:
MAILTO="" 0 2 * * * /backup/rotate.sh
这样,rotate.sh 执行失败时不会触发任何邮件;而其他未加 MAILTO="" 的任务仍按全局或默认规则发信。
避免误关全局通知的常见陷阱
不要在 /etc/crontab 或系统级文件里随意设 MAILTO="",否则整台机器所有 root 任务的错误都会静默丢失。用户级 crontab 不读取系统 MAILTO 变量,所以安全边界清晰。
注意:MAILTO="" 不能写成 MAILTO= 或 MAILTO=''(带单引号),必须是双引号空字符串,否则 cron 会忽略或报错。
配合重定向实现“有需才告”
关闭默认邮件后,可主动控制什么情况才报警:
- 脚本内用
if [ $? -ne 0 ]判断失败,再调mail -s发定制化告警 - 把关键输出重定向到日志:
0 2 * * * /backup/rotate.sh >> /var/log/backup.log 2>&1 - 失败时额外记录时间戳和错误码,便于后续巡检或对接监控工具
验证是否生效的快速方法
临时写一个必败命令测试:
MAILTO="" * * * * * /bin/false
等一分钟后检查 mail 或 journalctl -u crond | grep false,确认无邮件生成且日志里只有执行记录,就说明控制已生效。

















