Plainnotes

cron 任务的输出去哪了

2025-04-23 · 2 分钟工具

cron 里跑脚本,出错了却收不到任何通知。因为 cron 会把 stdout/stderr 通过邮件发给任务所有者,而大多数机器没装 MTA,邮件直接进 /dev/null。

两种处理:

一,脚本自己记日志,cron 行里重定向:

*/5 * * * * /usr/local/bin/job.sh >> /var/log/job.log 2>&1

二,包装一层,失败时主动告警:

*/5 * * * * /usr/local/bin/job.sh 2>&1 | logger -t job || curl -fsS https://hooks.example/alert

注意 || 只对上一条命令的退出码生效,管道里要 set -o pipefail 才可靠。

如果确实想要邮件,装 msmtp 或 ssmtp 配好中继,MAILTO= 写在 crontab 顶部。但对小项目来说,不如直接发 webhook。