首页/系统/Linux 运维命令速查/错过的任务:cron 不补跑与应对
定时任务与计划50 条

错过的任务:cron 不补跑与应对

传统 cron 不记录「错过」:机器关机或负载爆表错过的时间点就永久丢失;需要补跑能力时靠 anacron 或 systemd timer 的 Persistent。

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

错过的任务是什么问题

传统 cron 按时间点触发,机器关机或长时间高负载错过的时间点不会被补跑,任务就这么永久丢失。需要补跑能力时有两类方案:按天粒度的批任务可以交给 anacron,它记录上次执行时间,机器恢复运行后补做;精确到小时甚至分钟的补跑要用 systemd 定时器配合持久化选项,它在开机后检查上次触发时间并立即补一次。理解这个差别,才能回答「机器停机两天,备份有没有补跑」。

基本信息

适用平台GNU/Linux(cron 与 anacron,或 systemd 定时器)
传统 cron不补跑,错过的触发点永久丢失
补跑方案anacron 或定时器的持久化选项
补跑粒度anacron 只处理天级批任务,小时级用定时器
记录位置anacron 的上次执行时间戳文件
校验手段校验配置并立即补跑一次

典型使用场景

  • 回答「机器关机期间错过的备份是否补跑过」。
  • 给重要的每日批任务配置补跑能力。
  • 排查周期性任务为何某天没有执行。
  • 评估是否需要把天级任务从 cron 迁移到带持久化的定时器。
  • 长期停机的服务器恢复后确认补跑的顺序与错峰。

检查与补跑

检查与补跑
cat /var/spool/anacron/cron.daily             # 查看上次执行日期(Debian 系)
sudo systemctl status anacron --no-pager | head   # 确认 anacron 是否启用
sudo anacron -T                               # 校验 anacrontab 配置
sudo anacron -f -n cron.daily                 # 立即补跑每日任务
crontab -l | head                             # 查看当前用户的 cron 任务
sudo journalctl -u cron --since today --no-pager | tail -20   # 触发记录

机制对照

机制补跑能力使用要点
传统 cron不补跑错过的触发点永久丢失
anacron天级补跑只处理每日、每周、每月粒度
systemd 定时器可配置补跑配合持久化选项实现开机补跑
时间戳文件记录上次执行判断是否补跑过的直接证据
校验参数检查配置改完先校验再让策略生效
日志确认触发结合调度日志与脚本自身日志
anacron 只补天粒度的批任务:小时级或精确时间点的补跑必须用带持久化选项的定时器,两者的适用场景不能互换。
长期停机的服务器恢复后可能集中补跑多个任务:要注意错峰与依赖顺序,避免补跑风暴把 IO 与带宽打满。
判断是否补跑过要看时间戳文件与脚本自身日志两处证据,只看调度器日志无法确定脚本真的执行成功。

易错点

  • 以为每日任务一定会补跑:发行版没有启用 anacron 时,错过就是永久丢失。
  • 把小时级任务也交给 anacron,结果它按天粒度处理,执行频率完全不对。
  • 停机后集中补跑多个任务没有错峰,恢复瞬间把 IO 与带宽打满,影响业务。
  • 只看调度器日志就认为任务完成,实际脚本执行失败;需要结合脚本自身日志核对。

数据来源与参考

  • man 8 anacron(missed jobs 语义)
  • man 5 systemd.timer(Persistent)

相关工具

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