cron 体系总览
Linux 的定时任务有四个入口:用户任务表、系统级任务表、分片目录与批处理目录,另有 anacron 负责补跑错过的批任务。搞清楚该放哪里比记住写法更重要:放错位置会出现重复执行、环境不一致或权限不符,这些问题的排查成本往往比写表达式高得多。
基本信息
| 适用场景 | 理解定时任务体系与配置落位 |
|---|---|
| 组成 | cron 守护进程,加上四类配置入口 |
| 相关机制 | anacron 用于补跑,systemd timer 是另一套方案 |
| 命名差异 | RHEL 系守护进程叫 crond,Debian 系叫 cron |
四类入口
- 用户级:crontab -e,只对当前用户生效,不需要用户字段
- 系统级:/etc/crontab,多一个用户字段,通常由系统维护
- 分片式:/etc/cron.d 下的文件,同样多一个用户字段,适合配置管理下发
- 批处理目录:按小时或按天执行的目录,放入可执行脚本即可
- 补跑机制:anacron 处理关机期间错过的批任务
查看现状
查看现状
# 用户级:crontab -e(存于 /var/spool/cron 下)
# 系统级:/etc/crontab(多一个用户字段)
# 分片式:/etc/cron.d/*(多一个用户字段)
# 批处理目录:cron.hourly 等,放可执行脚本
systemctl status crond 2>/dev/null || systemctl status cron
ls /etc/cron.d/ /etc/cron.daily/
crontab -l入口对照
| 入口 | 是否需要用户字段 | 适用场景 |
|---|---|---|
| crontab -e | 否 | 个人或服务账号的日常任务 |
| /etc/crontab | 是 | 系统级任务,需 root 维护 |
| /etc/cron.d | 是 | 软件包或配置管理下发 |
| 批处理目录 | 否 | 脚本形式的定时批任务 |
| systemd timer | 不适用 | 需要精度、日志与依赖管理 |
同一个任务不要同时写在用户任务表和分片目录里:两处字段语义不同,重复执行是最常见的结果。
cron 的最小粒度是分钟。需要秒级就改用 systemd timer,或用带短睡眠的循环脚本凑出更细的间隔。
anacron 与 cron 不是替代关系:cron 负责按点触发,anacron 负责在开机之后补跑当天错过的批任务,两者通常同时存在、各管一段。