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

在Azure App Service使用自定义部署后操作时,如何启动Gunicorn?

在Azure App Service使用自定义部署后操作时,如何启动Gunicorn?

嗨,我太懂你现在的困扰了——加了部署后脚本之后容器直接报exit code 0退出,本质就是脚本跑完就没后续持续运行的进程了,容器自然就停了。其实你找对方向了,就是要在部署后操作的最后启动Gunicorn,但得注意几个关键细节,不然容易踩坑:

首先,得理清楚脚本的执行顺序:所有你需要的部署后操作(比如装额外依赖、跑数据库迁移、生成静态文件这些)一定要放在Gunicorn启动命令的前面,因为Gunicorn启动后是前台阻塞运行的,后面的代码不会再执行了。

然后是Gunicorn的启动命令,千万别加那些交互式的参数,比如--ti或者-tty,Azure App Service的容器是后台非交互式运行的,加这些参数直接就启动失败了。正确的写法得注意这几点:

  • 绑定0.0.0.0和环境变量里的$PORT,Azure会自动分配端口,硬编码端口肯定出问题
  • 要指定你的Flask应用入口,比如你的app实例在app.py里,那就是app:app
  • 保持Gunicorn在前台运行,别用nohup或者&放后台,不然脚本跑完还是会退出容器

给你个完整的deploy.sh示例参考:

#!/bin/bash
# 先执行部署后需要的前置操作,比如安装依赖
pip install -r /home/site/wwwroot/requirements.txt
# 要是有数据库迁移这类操作也放这
# flask db upgrade

# 然后启动Gunicorn服务
gunicorn --bind=0.0.0.0:$PORT app:app

另外还有几个小细节要留意:

  • 确保deploy.sh有可执行权限,要是怕权限不够,可以在脚本开头或者部署过程中加chmod +x /home/site/deployments/tools/deploy.sh
  • 如果你用了虚拟环境,得先激活再跑Gunicorn,比如:
    source /home/site/wwwroot/venv/bin/activate
    
  • 别把Gunicorn启动命令放后台,必须让它占着前台进程,这样容器才会一直运行

这样调整之后,部署脚本跑完前置操作就会启动Gunicorn,容器就会一直保持运行状态啦。

备注:内容来源于stack exchange,提问作者Superdooperhero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:53:06