首页/系统/Linux 运维命令速查/cron 定时任务体系总览
定时任务与计划50 条

cron 定时任务体系总览

Linux 定时任务有四个入口:用户 crontab、/etc/crontab、/etc/cron.d 与 cron.{hourly,daily,weekly,monthly} 目录,另有 anacron 负责补跑错过的批任务;先搞清放哪,再谈写法。

Linux 运维命令速查系统更新于 2026-10-13

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 负责在开机之后补跑当天错过的批任务,两者通常同时存在、各管一段。

易错点

  • 用户任务表与系统级配置的字段数量不同,互相复制会多写或少写一列
  • 同一任务写进两个入口导致重复执行,日志里会出现成对记录
  • 批处理目录里的脚本必须有执行位,否则会被静默跳过
  • cron 最小粒度是分钟,写秒级表达式会被拒绝
  • 关机期间错过的任务不会自动补跑,除非交给 anacron 或使用持久化定时器

数据来源与参考

  • man 8 cron(cronie)
  • man 5 crontab
  • RHEL 9 文档:Managing cron and at services

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌