Heroku & Discord.py:如何通过同一个Procfile运行两个机器人?
问题原因
你当前Procfile的写法不符合Heroku的进程管理规则:
- Heroku会监控Procfile中声明的进程的PID,当你用
&把两个Python脚本放到后台运行后,主shell进程会直接退出,Heroku会判定worker进程已经结束,直接回收dyno资源,两个机器人自然都无法正常运行 - 额外补充:
wait -n语法在Heroku dyno默认的shell环境中不一定被支持,也可能是触发进程提前退出的原因之一
修复方案
方案1:单dyno内用进程管理工具托管两个进程
推荐用honcho,它是适配Python生态的Procfile进程管理工具:
- 把honcho添加到你的
requirements.txt文件中:
honcho==1.1.0
- 在项目根目录新建一个
Procfile.workers文件,内容如下:
worker1: python jervis-1.py worker2: python jervis-2.py
- 修改根目录原有Procfile的内容为:
worker: honcho start -f Procfile.workers
这种方式会让honcho作为主进程托管两个机器人子进程,只要honcho不退出,Heroku就不会回收dyno,同时两个机器人任意一个崩溃时,honcho也会输出对应日志方便你排查问题。
方案2:拆分两个独立worker进程(稳定性更高,适合生产环境)
如果你的Heroku配额足够,可以直接在Procfile中声明两个独立的worker进程,后续可以在Heroku后台分别启停、查看各自的运行日志:
worker1: python jervis-1.py worker2: python jervis-2.py
部署完成后到Heroku后台的资源页面,把两个worker进程的运行开关都打开即可。
问题排查方法
如果修改配置后还是无法启动,直接执行heroku logs --tail查看运行时日志,就能定位具体报错原因,比如discord令牌错误、依赖缺失、权限异常等问题都可以通过运行日志直接定位。
内容的提问来源于stack exchange,提问作者Bhavyadeep Yadav
相关产品推荐
相关产品推荐

