Fly.io部署Python脚本遇Exit Code:0与Unhealthy allocations问题排查
Fly.io部署Python周期性任务失败:Exit Code:0与Unhealthy allocations问题解决
问题描述
尝试在Fly.io部署一个循环打印当前周数的Python周期性任务脚本,部署时出现Exit Code: 0和Unhealthy allocations错误,实例多次重启后失败。已尝试修改Procfile进程为worker、调整requirements.txt、修改time.sleep时长,均未解决。
原因分析
- 进程类型与健康检查不匹配:使用
web进程类型时,Fly.io会强制对其进行TCP/HTTP健康检查,但该脚本是后台worker任务,并未监听8080端口,导致健康检查失败,进程被判定为不健康。 - 冗余配置触发错误检查:
fly.toml中保留了针对HTTP服务的[[services]]配置,这些配置会持续对非HTTP服务执行健康检查,最终导致实例被终止重启。 - 进程退出误解:Exit Code:0表示脚本本身执行无错误,但Fly.io因健康检查不通过主动终止进程,导致循环重启直至超出重试次数。
解决方案
将任务配置为worker进程,移除不必要的健康检查和服务配置,让Fly.io将其作为后台长期运行任务处理。
1. 修改Procfile
将进程类型从web改为worker,明确后台任务属性:
worker: python db_script.py
2. 调整fly.toml配置
删除所有[[services]]相关配置,移除PORT环境变量,添加processes指定运行worker进程:
# fly.toml file generated for withered-snowflake-645 on 2023-02-05T04:28:07+05:30 app = "withered-snowflake-645" kill_signal = "SIGINT" kill_timeout = 5 processes = ["worker"] # 指定运行worker进程 [build] builder = "paketobuildpacks/builder:base" [experimental] auto_rollback = true
3. 重新部署并验证
执行部署命令:
fly deploy
查看运行日志确认任务状态:
fly logs
部署成功后,日志会每隔5秒打印当前周数,实例状态保持running,无重复重启记录。
内容的提问来源于stack exchange,提问作者ArcticTern
相关产品推荐
相关产品推荐

