为何部署在Heroku上的Python Telegram机器人运行1分钟后异常停止?
故障根源与修复方案
核心故障点
- 你当前的Procfile使用
web进程类型,这类进程是Heroku专门为对外提供HTTP服务的应用设计的:平台要求web进程必须在启动后60秒内绑定系统分配的$PORT端口提供HTTP响应,否则会直接判定进程异常,回收整个dyno——这完全对应你遇到的“启动运行1分钟就停止”的现象,也解释了为什么你从未触发平台30分钟无请求休眠的规则。 - 你的机器人代码用的是python-telegram-bot的轮询模式,整个程序没有启动任何HTTP服务、也没有绑定指定端口,根本无法通过Heroku对web进程的健康检查,必然会被平台强制终止。
- requirements.txt没有固定python-telegram-bot的版本,当前PyPI上的最新版是v20+的全异步架构,和你代码里使用的旧版同步API完全不兼容,就算解决了进程类型问题,代码也可能因为版本不匹配在运行时抛出异常退出。
- 你观察到的“随机自动触发运行”现象,本质是Heroku免费版的web dyno被回收后,只要有外部请求指向你部署的应用域名(比如随机扫描到该地址的网络请求),平台就会重新拉起dyno。此时机器人进程启动,刚好接收到触发时段的消息,就会呈现出随机响应指令的状态。
修复操作
- 修改Procfile配置,将web进程替换为适合后台长驻任务的worker进程。worker进程不需要绑定端口,也不会触发60秒无HTTP响应即杀进程的规则,修改后的文件内容为:
worker: python main.py - 固定requirements.txt里的依赖版本,匹配你代码使用的同步API,修改后的文件内容为:
python-telegram-bot==13.15 - 可选优化:在main.py中增加全局异常捕获逻辑,避免未处理的运行时错误导致进程意外退出。
内容的提问来源于stack exchange,提问作者sadtrue
相关产品推荐
相关产品推荐

