Heroku Scheduler任务重叠问题及解决方案实践
解决Heroku Scheduler定时任务重叠问题
问题场景
我在Heroku基础套餐上用Scheduler配置了6个定时任务,分别在每小时的:00、:10、:20、:30、:40、:50触发。部分任务(比如整点启动的任务)耗时可达15分钟,导致后续任务(比如10分启动的任务)在前序任务未完成时就被执行,引发任务重叠问题。
尝试过的无效方案
- 想在Python代码中判断是否有任务正在运行,若存在则跳过新任务,但不知道具体实现方式
- 尝试执行命令
heroku ps:scale scheduler=1限制调度器实例数量(通过Procfile配置),但该操作未生效
最终可行方案
通过在数据库中创建一张任务状态记录表来管控任务执行,表结构包含以下字段:
started_at:任务启动时间finished_at:任务结束时间status:任务运行状态(例如「运行中」「已完成」)
任务执行逻辑调整为:
- 启动前查询状态表,检查是否存在状态为「运行中」且
finished_at为空的任务 - 若存在上述任务,当前任务直接退出,不执行后续逻辑
- 若不存在,将当前任务的
started_at设为当前时间、status设为「运行中」,插入/更新到状态表 - 任务执行完成后,更新该任务的
finished_at为当前时间、status设为「已完成」
感谢@ceejayoz的帮助。
内容的提问来源于stack exchange,提问作者AlfonsoAG
相关产品推荐
相关产品推荐

