在Heroku部署.NET 5 Worker服务后短时间自动关停如何解决?
你遇到的问题核心是误用了Heroku的web dyno类型部署无HTTP服务的后台worker程序。web dyno的启动规则要求程序必须在启动后60秒内绑定Heroku分配的$PORT端口提供HTTP服务,超时就会被判定为启动失败强制关停,这就是你服务最长运行2分钟、多数情况不足1分钟的直接原因。
解决方案按以下步骤操作即可:
1. 调整项目根目录的Procfile配置
删除原有默认的web类型启动配置,改为worker类型配置,示例如下:
worker: dotnet [你的项目编译生成的dll名称].dll
注意不要在启动命令中硬编码端口,也不需要添加任何HTTP服务相关的启动参数。
2. 调整Heroku dyno运行配置
你可以通过Heroku后台资源面板直接操作,关闭web dyno、开启worker dyno,也可以通过Heroku CLI执行以下命令完成配置:
- 关闭默认启动的web dyno:
heroku ps:scale web=0 - 启动1个worker dyno实例:
heroku ps:scale worker=1
3. 注意dyno运行规则
- 免费版Heroku账号每月共有550小时的免费dyno运行时长,worker dyno和web dyno共享该额度,若不需要24小时不间断运行,免费额度足够使用
- 若需要24小时不间断运行,升级到Hobby及以上付费方案即可避免休眠限制
排查建议
如果调整配置后服务仍异常,可执行heroku logs --tail查看实时运行日志,根据报错信息排查是程序本身的代码逻辑问题,还是启动命令配置错误问题。
内容的提问来源于stack exchange,提问作者Squirrelkiller
相关产品推荐
相关产品推荐

