
Linux 定时任务(cron)的日志默认由系统日志服务(如 rsyslog 或 systemd-journald)记录,是否能查到、查到哪些内容,取决于 cron 服务的配置和系统日志策略。关键点是:日志不一定默认开启详细记录,需确认 cron 日志是否启用、输出位置在哪、以及是否有权限查看。
确认 cron 日志是否启用
cron 默认可能不记录执行详情,需检查 rsyslog 配置是否包含 cron 模块:
- 运行 grep -i cron /etc/rsyslog.conf /etc/rsyslog.d/*.conf,看是否含 module(load="imuxsock") 和 auth,authpriv.* /var/log/auth.log(Debian/Ubuntu)或 daemon.* /var/log/cron(RHEL/CentOS)
- 若无对应行,cron 日志可能被丢弃或合并到其他日志中(如 /var/log/messages)
- 修改后需重启 rsyslog:sudo systemctl restart rsyslog
查看标准 cron 日志文件
常见路径因发行版而异,优先按顺序检查:
- /var/log/cron — RHEL、CentOS、Fedora 默认位置
- /var/log/syslog 或 /var/log/auth.log — Debian、Ubuntu 通常将 cron 记录归入其中,可用 grep CRON /var/log/syslog 筛选
- 若使用 systemd,可直接用 journalctl:sudo journalctl -u crond -n 50(RHEL系)或 sudo journalctl -u cron -n 50(Debian系)
让 cron 输出更详细的执行信息
系统级 cron 日志可能不包含脚本 stdout/stderr。如需捕获任务实际输出,应在 crontab 中显式重定向:
- 在 crontab 条目末尾加 > /path/to/output.log 2>&1,例如:
30 2 * * * /home/user/backup.sh > /var/log/backup.log 2>&1 - 避免用 /dev/null 屏蔽输出,除非明确不需要日志
- 对用户级 crontab(crontab -e),同样适用重定向;日志路径需有该用户写入权限
排查常见无日志情况
如果查不到预期日志,可能是以下原因:
- cron 服务未运行:sudo systemctl status cron(或 crond)
- 用户 crontab 未生效:检查 sudo cat /var/spool/cron/crontabs/用户名(Linux)或 sudo ls -l /var/cron/tabs/(部分系统)
- SELinux 或 AppArmor 限制日志写入(尤其 RHEL/CentOS),可临时设为 permissive 模式测试
- 日志轮转已清理旧文件,用 zcat /var/log/cron.1.gz | grep ... 查看压缩归档










