最直接有效的方式是使用 >> logfile 2>&1 实现全量追加记录,其中>>追加标准输出,2>&1将标准错误重定向至同一文件,避免覆盖日志;错误写法是> logfile会清空历史记录。

在 crontab 中编辑任务时,要将脚本的标准输出(stdout)和标准错误(stderr)全部重定向到一个专用日志文件,最直接有效的方式是使用 >> logfile 2>&1 或更推荐的 >> logfile 2>&1 组合(注意是追加写入,避免覆盖)。
用 >> logfile 2>&1 实现全量追加记录
这是最常用也最稳妥的做法。其中:
-
>> logfile表示以追加方式写入标准输出; -
2>&1表示将标准错误重定向到当前标准输出的位置(即同一个日志文件); - 合起来就是“所有输出(含错误)都追加进 logfile”,不会丢失任何信息。
例如,在 crontab 中这样写:
*/5 * * * * /path/to/your/script.sh >> /var/log/myscript.log 2>&1避免使用 > 单重定向(会清空日志)
如果误用 > logfile,每次 cron 执行都会覆盖日志文件,只保留最后一次运行的输出,不利于排查历史问题。
- ❌ 错误写法:
/path/to/script.sh > /var/log/myscript.log 2>&1 - ✅ 正确写法:
/path/to/script.sh >> /var/log/myscript.log 2>&1
可选:加时间戳提升可读性(适合调试阶段)
如果希望每条日志自带时间标记,可在命令前加上 date 或用 shell 封装:
这样每次执行前先打个时间分隔线,方便定位某次运行的起始位置。
注意日志路径权限与磁盘空间
确保 cron 运行用户(通常是普通用户或 root)对目标日志路径有写权限;同时建议定期轮转或清理,防止日志无限增长占满磁盘。
- 检查权限:
ls -ld /var/log和ls -l /var/log/myscript.log - 简单轮转示例(加到脚本开头):
logrotate -s /var/log/myscript.log.state /var/log/myscript.log,或用 logrotate 工具统一管理。











