麒麟OS查看crontab执行日志需综合使用journalctl、/var/log/cron、syslog中CRON条目、任务重定向输出及dmesg,覆盖服务运行、调度记录、执行结果与底层异常。

直接解析 /var/log/cron 实时监控定时任务的执行频率与异常退出,关键不在于“读全量日志”,而在于精准提取调度行为指纹和失败信号。系统本身不记录任务内部退出码,但会留下可推断异常的强线索——比如执行未完成、权限拒绝、命令不存在、或根本没触发。
识别任务真实执行频率:抓取 CMD 行 + 时间戳对齐
每条成功触发并进入执行阶段的日志形如:
May 20 05:42:01 hostname CRON[12345]: (user) CMD (/path/to/script.sh)这不是“任务运行完成”,只是“开始执行”。要统计真实频率,需按分钟级聚合 CMD 行,并注意:
- 同一任务在一秒内重复出现多条 CMD 日志,大概率是 crontab 配置了高频表达式(如
* * * * *),或脚本自身未加锁导致并发重入 - 连续多分钟缺失某任务的 CMD 日志,说明该任务未被调度——可能因用户 crontab 被删除、crond 服务中断、或系统时间跳变导致跳过
- 用
awk '{print $1,$2,$3}' /var/log/cron | sort | uniq -c | sort -nr | head -20快速查看最近最活跃的调度时间点分布
捕获异常退出的典型指纹:四类高危日志模式
真正能反映“异常退出”的不是 cron 自身日志,而是它在失败时留下的上下文痕迹:
-
Permission denied:常见于脚本无执行权限、或 crontab 中路径写错(如用了
~/script.sh,但 cron 不加载 shell 环境) - (CRON) ERROR 或 can't fork:系统资源不足(进程数/内存超限),或 crond 进程异常
-
command not found:PATH 环境变量缺失,或命令依赖未安装(如脚本里用了
jq但未指定绝对路径) -
FAILED 或 exit status [非0]:部分发行版(如 RHEL/CentOS)会在执行后补一条带 exit code 的日志,例如:
May 20 05:42:02 hostname CRON[12345]: (user) CMD (/path/to/script.sh) FAILED (exit status 1)
实时监控推荐组合命令(无需安装额外工具)
把日志流转化成可观测信号:
- 监听新 CMD 行并计数(每10秒刷新):
sudo tail -f /var/log/cron | grep --line-buffered "CMD" | awk '{print $6}' | sort | uniq -c | sort -nr - 高亮所有失败线索(持续滚动):
sudo tail -f /var/log/cron | grep -i "denied\|failed\|error\|not found\|can't fork" - 查某用户最近 5 分钟是否“静默”(无任何 CMD):
sudo grep "CMD" /var/log/cron | grep "$(date -d '5 minutes ago' '+%b %d %H:%M')" | grep "username"
补充验证:结合 journalctl 交叉确认服务状态
/var/log/cron 只记录调度层行为,不反映 crond 进程健康度。若发现日志突然中断,立即检查:
- crond 是否仍在运行:
systemctl is-active cron - 是否有近期崩溃:
sudo journalctl -u cron --since "1 hour ago" | grep -i "stop\|start\|segfault" - 是否被 systemd 重启过:
sudo systemctl status cron | grep "Active:"—— 若显示 “since X minutes ago”,说明刚恢复

















