Linux中排查crontab不执行,须先确认crond服务运行(systemctl status cron/crond),再查系统日志(/var/log/cron或grep CRON /var/log/syslog)、journalctl日志(journalctl -u cron -f)及任务重定向输出(>> /path/log 2>&1)。

Linux 中查看 Cron 服务运行状态和日志,关键在于区分“服务是否在运行”和“任务是否实际执行”,两者需分别验证。系统级 cron(如 crond 或 cron)本身可能正常,但具体任务仍可能因权限、路径、环境变量或脚本错误而失败。下面分两部分说明,操作简单、覆盖主流发行版。
检查 Cron 服务是否正在运行
不同发行版服务名略有差异,先确认并查看状态:
- Debian/Ubuntu 系统:运行
sudo systemctl status cron - CentOS/RHEL/Rocky/AlmaLinux 系统:运行
sudo systemctl status crond - 若输出中显示 active (running),说明守护进程已启动;若为 inactive (dead) 或 failed,需用
sudo systemctl start cron(或crond)启动 - 也可用
ps aux | grep -E '(cron|crond)'快速确认进程是否存在
查看系统级 Cron 调度日志
这部分日志记录“谁、何时、触发了哪条任务”,不包含脚本内部输出,但能确认调度行为本身是否发生:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
CentOS/RHEL 系列:默认写入
/var/log/cron,直接查看:sudo tail -n 20 /var/log/cron -
Debian/Ubuntu 系统:通常合并到
/var/log/syslog,筛选 cron 相关行:sudo grep -i CRON /var/log/syslog | tail -n 20 - 若日志文件不存在或为空,可能是 rsyslog 未启用 cron 模块——可创建
/etc/rsyslog.d/50-cron.conf,写入cron.* /var/log/cron,再重启sudo systemctl restart rsyslog
用 journalctl 实时追踪 Cron 服务活动
适用于所有使用 systemd 的现代 Linux 发行版,无需依赖 rsyslog 配置:
- 查看最近 30 条 cron 相关日志:
sudo journalctl -u cron -n 30(Ubuntu/Debian)或sudo journalctl -u crond -n 30(RHEL 系列) - 持续监听新日志(适合调试刚添加的任务):
sudo journalctl -u cron -f - 过滤出实际触发任务的记录(排除服务启停消息):
sudo journalctl -u cron | grep "CMD\|Started.*timer"
捕获单个定时任务的实际输出
系统日志只记录“调度动作”,不保存命令执行后的 stdout/stderr。要看到脚本里 echo 或报错信息,必须显式重定向:
- 编辑 crontab:
crontab -e - 将原任务行(例如
* * * * * /home/user/backup.sh)改为:* * * * * /home/user/backup.sh >> /var/log/backup.log 2>&1 - 确保日志目录可写:
sudo touch /var/log/backup.log && sudo chmod 644 /var/log/backup.log - 之后用
tail -f /var/log/backup.log即可实时观察脚本真实输出

















