← 中文资源

简体中文版本

防止 Cron 任务重叠运行

用锁或运行状态检查保护定时任务,避免慢速运行与下一次触发重叠并重复处理同一窗口。

阅读英文原文

概述

重叠的定时运行是重复处理的隐蔽来源。共享存储中的运行标记加陈旧运行回收器,可防止慢速调用与下一次触发冲突,幂等性则兜底。

关键步骤

  1. 开始时记录运行标记,成功完成时清除。
  2. 存在标记且早于预期最大运行时间时跳过执行。
  3. 用回收器清除超过预期最大时长的标记。
  4. 作为第二道防线让任务幂等。

验证

  • 任务运行期间第二次触发会跳过执行。
  • 完成后清除标记。
  • 崩溃的运行被回收器收回。
  • 重复运行不会重复生效。

注意事项

  • 锁能防止重叠,但不会让任务变得增量;慢任务仍可能漏掉一个窗口。
  • 无法协调使用不同锁机制的不同调度器。

适用范围

本条目围绕「防止 Cron 任务重叠运行」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

建议在正式环境落地前先在预发或隔离环境演练一遍,把关键观测指标与负责人一并记录,确保出现异常时能快速定位并恢复。

INSERT INTO job_runs (name, started_at)
VALUES ('nightly-rollup', now())
ON CONFLICT (name) DO NOTHING
RETURNING name;