如何记录 cron 定时任务的执行日志?

记录 cron 日志的核心:在命令尾部加 >> /path/to/logfile 2>&1 重定向输出到文件,配 logrotate 做轮转。也可用 logger 命令写入 syslog。

最佳实践
如何记录 cron 定时任务的执行日志?封面

最基本的做法:在 crontab 的命令末尾加 >> /path/to/logfile 2>&1,把标准输出和标准错误都写入日志文件。再加 logrotate 防止日志无限增长。

方法一:输出重定向(最常用)

# 每天凌晨 2 点执行备份,日志写入文件
0 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
  • >> 追加写入(> 是覆盖);
  • 2>&1 把错误输出也合并到同一个文件。

建议在脚本内部打印时间戳,便于事后定位:

#!/bin/bash
echo "$(date '+%Y-%m-%d %H:%M:%S') 开始备份"
# ... 备份逻辑 ...
echo "$(date '+%Y-%m-%d %H:%M:%S') 备份完成"

核查执行结果时,将任务名、运行标识和退出码写入日志。按 DataKit 日志采集指南接入观测云后,先确认一轮任务的开始和完成记录都能找到;日志没有更新时,还要区分任务未运行、任务无输出和采集异常。

方法二:写入 syslog

0 2 * * * /home/user/backup.sh 2>&1 | logger -t backup

logger -t backup 把输出打进 syslog(/var/log/syslog),标签为 backup,由 rsyslog 统一管理轮转。

方法三:logrotate 防止日志膨胀

# /etc/logrotate.d/backup
/var/log/backup.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

常见问题(FAQ)

Q:cron 本身有日志吗?
A:有。cron 守护进程的记录在 /var/log/syslog(Debian/Ubuntu)或 /var/log/cron(CentOS/RHEL)中,记录"什么时候执行了哪个任务",但不包含脚本输出。

Q:脚本没输出也没报错,但任务似乎没执行?
A:cron 环境变量极简(没有 PATH 等),脚本里要用命令的绝对路径;另外检查 % 字符需要转义为 \%。

Q:如何知道任务执行失败?
A:脚本失败时记录错误原因和退出码,并返回非零状态。后续检查应按任务名和运行标识匹配,不能把没有新日志直接等同于执行失败。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台