linux cron日志默认存于/var/log/syslog(ubuntu/debian)或/var/log/cron(centos/rhel),需先确认rsyslog中cron日志是否启用,再通过grep、tail等命令查看和实时监控,并结合日志条目解读与多维度排查任务执行问题。

Linux系统中,cron 定时任务的日志默认通常记录在 /var/log/syslog(Ubuntu/Debian)或 /var/log/cron(CentOS/RHEL)中,具体位置取决于发行版和rsyslog配置。直接查看日志前,需确认 cron 日志是否已启用,否则可能查不到任何执行记录。
确认 cron 日志是否开启
默认情况下,部分系统(尤其是较新版本的 Ubuntu)会关闭 cron 的独立日志输出,只混在 syslog 中;RHEL/CentOS 一般默认启用单独的 /var/log/cron。
- 检查 rsyslog 配置:
/etc/rsyslog.d/50-default.conf(Ubuntu)或/etc/rsyslog.conf(RHEL),确认是否存在类似cron.* /var/log/cron的行 - 若被注释,取消注释并重启服务:
sudo systemctl restart rsyslog - 验证 cron 是否在日志中输出:运行
logger -t CRON "test log",再执行tail -n 3 /var/log/cron或grep CRON /var/log/syslog
常用日志查看命令
根据系统类型选择对应路径,配合 grep 精准过滤 cron 相关条目:
- Ubuntu/Debian:
sudo grep CRON /var/log/syslog | tail -20 - CentOS/RHEL:
sudo tail -20 /var/log/cron - 实时监控执行情况:
sudo tail -f /var/log/cron(或/var/log/syslog) - 查看某用户所有 cron 执行记录:
sudo grep 'CMD.*username' /var/log/cron
日志条目解读示例
典型 cron 日志格式如下(以 CentOS 为例):
Jun 12 03:00:01 servername CROND[12345]: (root) CMD (/usr/bin/python3 /opt/backup.py)
含义说明:
- Jun 12 03:00:01:任务实际触发时间(注意不是计划时间,而是真正 fork 执行的时刻)
- CROND[12345]:cron 主进程 PID
- (root):以哪个用户身份运行
- CMD (...):执行的具体命令(含完整路径,非常重要!)
失败任务通常不会直接显示错误,但可能伴随以下线索:
- 命令路径错误 → 日志中无 CMD 行,或出现
(root) MAIL (mailing output)(表示有 stdout/stderr 输出且未重定向) - 权限不足 → 查看对应用户的 mail:
sudo -u username mail(cron 默认将错误输出发给任务所属用户) - 环境变量缺失 → 脚本在 cron 下运行失败,但在终端正常 → 需显式设置 PATH 或使用绝对路径
排查定时任务不执行的常见线索
仅靠日志不一定能定位全部问题,需结合多维度验证:
- 确认 cron 服务正在运行:
systemctl status crond(RHEL)或systemctl status cron(Debian) - 检查 crontab 语法是否正确:
crontab -l查内容,crontab -e修改后自动校验(部分版本支持) - 注意 % 符号需转义(在 crontab 中表示换行,应写成 \%
- 脚本开头加
#!/bin/bash,并在 crontab 中用/bin/bash /path/to/script.sh显式调用 - 测试最小化命令:
* * * * * date >> /tmp/cron-test.log 2>&1,观察是否写入










