首页/系统与基础设施/自动化运维速查/错失执行的定时任务处理
批量执行与作业50 条

错失执行的定时任务处理

错失执行指计划时间到了任务却没运行,常见原因是主机停机、调度服务未启动、时区变化、容器重建或调度器重启。处理策略分补跑与跳过两类:备份、证书续期等有状态任务需要补跑,采集类时点相关任务补跑无意义,甚至会造成数据错乱。补跑的前提是任务幂等。

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

错失执行的处理

错失执行指到了计划时间任务却没有运行,原因包括主机停机、调度服务未启动、时区或夏令时切换、容器实例被重建,以及调度器自身重启期间的时间窗口丢失。处理策略分两类:补跑(恢复后立即执行一次,或按周期补齐)与跳过(只等下一次到期时间)。选择依据是任务语义:备份、证书续期这类有状态且必须在时限内完成的任务需要补跑;采集指标这类时点相关的任务补跑没有意义,硬补会造成时间戳错乱。补跑的前提是任务可重复执行并能判断「这一周期是否已经完成」。

基本信息

常见原因主机关机、调度服务未运行、时区变化、容器重建、调度器重启
补跑实现systemd 的 Persistent、anacron(按天粒度)、调度框架的 catchup 参数
跳过语义只按下一次到期时间执行,不追溯已错过的周期
前提条件任务幂等,且能查询最近一次成功时间

典型使用场景

  • 非 7×24 运行的工作站需要开机后补跑备份
  • 容器实例重建后需要恢复未完成的周期任务
  • 云主机维护重启,错过的巡检在恢复后补跑
  • 采集类任务只补最近一次,不补齐全部历史
  • 证书续期类任务必须在到期前完成,错过即需告警

补跑配置与幂等判断

补跑配置与幂等判断
# systemd timer:开机后若发现错过则立即补跑一次
[Timer]
OnCalendar=daily
Persistent=true

# anacron:面向非 7x24 运行的主机,按天粒度补跑
# 1  5  cron.daily  nice run-parts /etc/cron.daily

# 补跑前先判断今天是否已经成功执行过,保证幂等
ok=/var/lib/backup/last.ok
[ -f "$ok" ] && [ "$(date -r "$ok" +%F)" = "$(date +%F)" ] && exit 0
/opt/bin/backup.sh && date > "$ok"

处理策略对比

策略行为适用任务
补跑一次恢复后立即执行一次有状态但不要求补齐历史的任务
补齐全部周期按错过的次数多次执行必须按周期结算的任务,如计费汇总
跳过等下一次不补跑,等下一个到期时间时点相关的采集类任务
告警转人工只上报不自动执行影响大、不宜自动决策的任务
补跑的前提是任务能识别「这一周期是否已完成」。用状态文件或数据库记录最近一次成功时间,比依赖调度器的记忆更可靠,因为调度器本身也可能被重建或迁移。
盲目补齐所有错过的周期会在恢复瞬间形成集中风暴(例如停机 8 小时后一次跑 8 轮),可能压垮目标系统或与业务高峰叠加,补跑同样需要限速与分批。

易错点

  • 主机停机错过的任务没有任何补跑机制,备份出现长期空档且无人发现
  • 恢复后一次性补齐全部错过周期,形成集中风暴冲击目标系统
  • 补跑不判断幂等,重复执行导致数据重复计入或重复扣减
  • 时区或夏令时切换导致任务在不预期的时间执行,或整段漏执行

数据来源与参考

  • Linux 手册页 anacron(8) 与 crontab(5)
  • systemd 官方文档:systemd.timer 的 Persistent 选项
  • Apache Airflow 官方文档:catchup 与调度补跑语义

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/missed-schedule-execution-handling.html

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