cron 日志报 (No MTA installed, discarding output) 怎么解决?
该提示表示 cron 任务的输出无处投递:系统没装邮件服务(MTA),输出被丢弃。解法:任务里重定向到日志文件、装轻量 MTA(如 msmtp)、或用 systemd timer。本文给出各方案。
含义:cron 的传统设计是把任务输出以邮件发给任务属主**;系统没装 MTA(邮件传输代理),邮件发不出去,输出被丢弃——任务本身照常执行了,这只是"输出没人接"的警告。三种解法按推荐度:重定向到日志文件 > 装轻量 MTA > 换 systemd timer。**
解法一:重定向到日志文件(推荐)
*/10 * * * * /app/jobs/backup.sh >> /var/log/backup.log 2>&1
>> 追加 stdout,2>&1 把 stderr 也并进来。输出有了着落,警告自然消失。
配合 logrotate 防膨胀:
/var/log/backup.log {
weekly
rotate 4
compress
missingok
}
解法二:装个轻量 MTA
真想收 cron 邮件通知(任务失败时发邮件其实很实用):
# Debian/Ubuntu 装 msmtp 这类只发不收的轻量 MTA
sudo apt install msmtp msmtp-mta
配置好发信服务器后,cron 输出就能发到 MAILTO 指定的邮箱:
MAILTO="ops@example.com"
*/10 * * * * /app/jobs/backup.sh
只想要失败通知就只对 stderr 放开:>> /var/log/backup.log(stdout 进文件,stderr 走邮件)。
解法三:换 systemd timer
# /etc/systemd/system/backup.timer
[Timer]
OnCalendar=*:0/10
# /etc/systemd/system/backup.service
[Service]
ExecStart=/app/jobs/backup.sh
输出自动进 journal(journalctl -u backup),自带状态与失败记录,比 cron 邮件机制现代得多。
观测云对照
定时任务输出统一采集。 无论重定向到文件还是进 journal,DataKit 都能采到观测云;监控器对"任务日志里出现 error/失败"或"预期时间点没有成功日志"做告警,比邮件可靠得多。
常见问题(FAQ)
Q:这个警告意味着任务没执行吗?
A:不是。任务正常执行了,只是输出无处投递被丢弃——但这也意味着你看不到任务里的报错,尽快把输出接住。
Q:MAILTO="" 设为空会怎样?
A:明确禁用邮件发送,输出直接丢弃,警告也不再出现——眼不见为净但问题仍在,不如重定向到文件。
Q:为什么有的系统不装 MTA?
A:服务器最小化安装常见做法,传统本地邮件在现代运维中已被集中日志/告警平台取代。