linux查看cron日志核心是确认日志来源(rsyslog或journald)、定位路径、提取关键信息:centos/rhel默认用/var/log/cron,ubuntu/debian混在/var/log/syslog;优先用sudo journalctl -u cron -n 50;若日志未启用需配置rsyslog并重启;单个任务建议重定向输出至独立文件以便排查。

Linux 中查看 cron 服务运行日志,核心是确认日志来源(rsyslog 还是 journald)、定位日志路径、再用合适命令提取关键信息。不同发行版默认行为差异大,不能只盯一个文件。
查系统级 cron 日志文件
多数 CentOS/RHEL 系统默认将 cron 日志写入 /var/log/cron;Ubuntu/Debian 则通常混在 /var/log/syslog 中。
- 先检查文件是否存在且有内容:
sudo ls -l /var/log/cron /var/log/syslog 2>/dev/null - 若存在 /var/log/cron,直接查看最近记录:
sudo tail -n 30 /var/log/cron - 若用的是 Ubuntu/Debian 且 /var/log/cron 为空,从 syslog 中筛选:
sudo grep -i CRON /var/log/syslog | tail -n 30 - 若用的是 CentOS/RHEL 且 syslog 没结果,试试 messages:
sudo grep -i cron /var/log/messages | tail -n 30
用 journalctl 查看 cron 单元日志
所有 systemd 系统都支持此方式,不依赖 rsyslog 是否启用,推荐优先使用。
- 查看最近 50 条 cron 服务日志:
sudo journalctl -u cron -n 50(注意:部分系统服务名是 crond,可试 journalctl -u crond) - 实时跟踪新日志:
sudo journalctl -u cron -f - 只看实际执行任务的行(排除启动/停止消息):
sudo journalctl -u cron | grep "CMD "
确认 cron 日志是否已启用
很多最小化安装或新版 Ubuntu 默认关闭独立 cron 日志,导致 /var/log/cron 为空。
- 检查 rsyslog 配置是否启用 cron 模块:
grep -r "cron\." /etc/rsyslog.conf /etc/rsyslog.d/ - 若无有效配置,在 /etc/rsyslog.d/50-cron.conf 中添加:
echo "cron.* /var/log/cron" | sudo tee /etc/rsyslog.d/50-cron.conf - 重启服务并创建日志文件:
sudo systemctl restart rsyslog && sudo touch /var/log/cron && sudo chmod 644 /var/log/cron - 验证是否生效:
logger -t CRON "test"; sudo tail -n 1 /var/log/cron
让单个任务输出更可控(实用建议)
系统日志只记录“任务被触发”,不记录脚本内部 stdout/stderr。要排查失败原因,必须重定向输出。
- 在 crontab 中为命令添加重定向:
* * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1 - 确保目标目录可写:
sudo mkdir -p /var/log/myscript && sudo chown $USER:$USER /var/log/myscript - 避免日志无限增长,可配合 logrotate 或加时间戳:
* * * * * /path/to/script.sh >> /var/log/myscript_$(date +\%Y\%m\%d).log 2>&1











