anacron 专为非持续在线设备设计,确保任务最终执行;cron 依赖系统常在线,按分钟级精确调度。anacron 无守护进程、依赖 cron 触发,仅支持天级周期与固定配置格式,通过时间戳文件实现补执行;cron 独立运行,支持灵活语法与完整日志记录。

anacron 和 cron 都是 Linux 中用于执行周期性任务的工具,但设计目标和适用场景完全不同。
适用机器类型不同
cron 依赖系统持续在线,适合服务器这类 24×7 不关机的设备。它每分钟检查一次任务表,严格按设定时间(精确到分钟)触发任务。如果机器在指定时刻关机或休眠,该次任务就直接跳过,不会补执行。
anacron 则专为笔记本、台式机等可能频繁关机的设备设计。它不追求“准时”,而是确保“最终执行”。比如设了每天运行一次的任务,哪怕你三天没开机,第四天一启动,anacron 就会立刻补上这三次漏掉的执行(具体次数由配置决定)。
时间精度与配置方式不同
cron 支持分钟级调度,语法灵活:分、时、日、月、周五字段,可写 */5 * * * *(每5分钟)、0 2 * * *(每天凌晨2点),还支持 @daily 这类简写。
anacron 只支持“天”为单位的周期,配置在 /etc/anacrontab 中,格式固定为四字段:period delay job-id command。例如:
- 7 10 backup-weekly /usr/local/bin/backup.sh 表示每周执行一次,开机后延迟10分钟再运行;
- @weekly 是别名,等价于写 7。
它没有小时、分钟概念,也不支持通配符或范围表达式。
运行机制依赖关系不同
cron 是独立守护进程(crond),自己读取所有 crontab 文件并调度任务。
anacron 没有常驻进程,它本身不主动轮询。实际由 cron 每天触发一次(通常通过 /etc/cron.daily/anacron 脚本),然后 anacron 才去检查 /var/spool/anacron/ 下的时间戳文件,判断哪些任务该补跑了。也就是说:anacron 必须依赖 cron 才能工作。
任务记录与日志行为不同
cron 的每次执行都记入系统日志(如 /var/log/syslog 或 /var/log/cron),便于追踪是否按时触发,但不自动记录“是否因关机而跳过”。
anacron 每次成功执行后,会在 /var/spool/anacron/ 下生成对应 job-id 的时间戳文件(如 backup-daily),内容就是执行日期。下次启动时,它靠比对这个日期和当前时间来决定是否需要补跑——这是它实现“不遗漏”的核心机制。










