概述
重叠的定时运行是重复处理的隐蔽来源。共享存储中的运行标记加陈旧运行回收器,可防止慢速调用与下一次触发冲突,幂等性则兜底。
关键步骤
- 开始时记录运行标记,成功完成时清除。
- 存在标记且早于预期最大运行时间时跳过执行。
- 用回收器清除超过预期最大时长的标记。
- 作为第二道防线让任务幂等。
验证
- 任务运行期间第二次触发会跳过执行。
- 完成后清除标记。
- 崩溃的运行被回收器收回。
- 重复运行不会重复生效。
注意事项
- 锁能防止重叠,但不会让任务变得增量;慢任务仍可能漏掉一个窗口。
- 无法协调使用不同锁机制的不同调度器。
适用范围
本条目围绕「防止 Cron 任务重叠运行」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
建议在正式环境落地前先在预发或隔离环境演练一遍,把关键观测指标与负责人一并记录,确保出现异常时能快速定位并恢复。
INSERT INTO job_runs (name, started_at)
VALUES ('nightly-rollup', now())
ON CONFLICT (name) DO NOTHING
RETURNING name;