如何列出系统里所有的 cron 定时任务?
当前用户任务用 crontab -l;指定用户用 crontab -u 用户名 -l;系统级任务在 /etc/crontab、/etc/cron.d/、/etc/cron.daily 等目录;root 权限可遍历所有用户。本文给出全量查看法。
分层查看:①当前用户——crontab -l;②其他用户——sudo crontab -u root -l;③系统级——/etc/crontab 文件与 /etc/cron.d/ 目录;④周期脚本目录——/etc/cron.daily|hourly|weekly|monthly/。真正的"全量"要把这四层都看一遍。
各层命令
# 当前用户
crontab -l
# 指定用户(需权限)
sudo crontab -u www-data -l
# 遍历所有用户的 crontab(root)
for u in $(cut -d: -f1 /etc/passwd); do
crontab -u "$u" -l 2>/dev/null | grep -v '^#' | grep . && echo " ↑ 用户: $u"
done
# 系统级
cat /etc/crontab
ls -l /etc/cron.d/
cat /etc/cron.d/*
# 周期脚本目录
ls /etc/cron.daily /etc/cron.hourly /etc/cron.weekly /etc/cron.monthly 2>/dev/null
现代系统别漏了 systemd timer
越来越多发行版用 timer 替代传统 cron:
systemctl list-timers --all
输出会显示每个 timer 下次/上次执行时间与对应 service——查"机器上到底有哪些定时任务"时这一步不能省。
容器/编排环境
- 容器内:
docker exec 容器 crontab -l - K8s:
kubectl get cronjobs -A
确认任务真实触发
列表只告诉你"配了什么","跑没跑"看日志:
grep CRON /var/log/syslog | tail -20 # Debian/Ubuntu
journalctl -u cron --since today # systemd 系统通用
观测云对照
任务清单之外的执行证据。 观测云的做法:任务输出统一采集,监控器对每个关键任务配心跳告警(预期周期内无成功日志即通知);清单管配置、告警管执行,两头都硬。
常见问题(FAQ)
Q:crontab -l 显示 no crontab for xxx?
A:该用户没有任务——不代表系统没有,其他用户和系统级目录还要查。
Q:anacron 又是什么?
A:为不常开机的机器(笔记本)设计的补跑机制,任务在 /etc/anacrontab;桌面版 Ubuntu 常见。
Q:怎么知道某个进程是哪个 cron 任务起的?
A:ps -ef 看父进程链找到 CRON,再对照 cron 日志里同时刻的任务行。