如何记录 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') 备份完成"

方法二:写入 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
}

观测云对照

cron 日志写入文件后,观测云 DataKit 可以采集到平台统一检索;更重要的是可以配置监控器——当备份脚本输出 ERROR 或日志文件长时间没有新内容(说明任务没跑)时触发告警。

常见问题(FAQ)

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

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

Q:如何知道任务执行失败?
A:脚本内显式 echo "ERROR: ..." 并退出非零码,配合观测云监控器检测日志中的 ERROR 关键字或日志中断来触发告警。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台