服务公告
定时任务的输出去哪了:邮件与重定向
发布时间:2026-01-31 16:17
## 概念 cron 任务报错了,错误信息去哪了,很多人从没想过这个问题。答案默认是本地邮件:任务产生输出时,调度器把输出发给任务属主的邮箱,多数服务器没配邮件客户端,这些输出就静静躺在邮件队列里,攒满磁盘的邮件目录与永远无人查看的错误信息并存,是未加处理的定时任务的标准状态。 ## 原理:默认行为的问题 任务脚本里的标准输出与标准错误,若任务行没有重定向,全部交给邮件通道。这带来两个实际麻烦:错误被吞掉,任务失败数周无人知晓;邮件文件持续累积,慢慢侵蚀 inode 与磁盘空间,某天磁盘告警时才在邮件目录里挖出几个月前的报错堆。规范做法是任务行里显式处理输出:正常输出落日志文件,错误可以单独分流或合并,排障时才有的可看。 ## 最小实操 任务行的输出处理示范。 ``` 30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1 ``` 追加写入避免覆盖,错误流并入标准流,一个文件看全貌。不需要任何输出的任务,也别直接扔给邮件,显式丢弃并保留退出状态。 ``` */5 * * * * /usr/local/bin/check.sh > /dev/null 2>&1 ``` 更讲究的做法是在脚本内部管理日志,任务行只负责调度,输出规范跟着脚本走,换台机器挂任务也不会退回裸奔状态。 ## 常见错误 一是全部输出重定向到空设备后,连真实的失败信息也一起扔掉,任务静默失败数月;二是多个任务写同一个日志文件互相穿插,排障时分不清哪行来自哪个任务,日志文件按任务拆分才好用;三是忘了给日志文件配轮转,排障日志自己把磁盘写满;四是任务失败没有通知渠道,人不会主动去翻日志,失败要能推到人面前才算被发现。顺云云服务器上批量整理定时任务时,把输出处理当成必检项逐条过一遍,顺手清一次积压的邮件目录,磁盘与心智都轻松。上一篇: 服务器采购从买断到租用的演变
下一篇: 长期运营服的降配与升级时机