You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让部署在Heroku的Python脚本仅按计划时间运行?

解决Heroku上Python定时脚本额外运行的问题

你的问题核心在于用Web进程来运行定时任务,再加上Heroku的默认机制,才导致了脚本频繁额外启动。下面给你一步步梳理解决方案:

1. 把Web进程改成Worker进程

Heroku的web进程是专门用来处理HTTP请求的,平台会定期对它做健康检查——如果你的脚本没有监听HTTP端口,Heroku会判定进程异常,反复重启它,这就是额外运行的主要诱因。

修改你的Procfile内容为:

worker: python my_script.py

2. 调整Heroku进程的缩放配置

现在需要彻底禁用原来的Web进程,只启动一个Worker进程:
在终端执行这条命令:

heroku ps:scale web=0 worker=1

这样就只会有一个Worker实例在后台运行,不会再因为Web进程的健康检查触发重复启动。

3. 核对Heroku Scheduler的定时规则

打开Heroku后台的Scheduler插件,仔细检查:

  • 是不是只添加了一条每日运行的任务,有没有重复创建的定时规则
  • 任务的触发时间和命令是否正确,有没有误设置成高频触发的规则

4. 检查脚本自身的逻辑

确认你的脚本里没有以下可能导致重复执行的代码:

  • 无限循环(比如while True)结构,让脚本在单次启动后反复执行任务
  • 异常捕获后自动重启整个脚本的逻辑
  • 脚本内部自带的定时触发代码(比如用time.sleep循环执行,这会和Scheduler的定时规则冲突)

5. 查看日志精准定位问题

如果还是有异常,用Heroku日志命令排查每次启动的触发源:

heroku logs --tail

从日志里你能清楚看到每次进程启动的原因——是Scheduler触发的正常任务,还是dyno自动重启,或是其他异常导致的重启,方便你精准解决问题。

内容的提问来源于stack exchange,提问作者Gokul nath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:47:48