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

Azure App Service无法成功运行Celery及Celery Beat问题求助

问题根因

故障由两个配置错误共同导致:

  1. Gunicorn启动参数存在语法错误
    启动命令里使用了全角长破折号—代替Linux命令标准的双短横参数前缀--,同时--bind参数未指定Azure App Service默认探测的8000端口,参数和等号之间还有多余空格,导致Gunicorn根本没有正常启动、没有在8000端口监听HTTP请求。这也是为什么能看到Celery定时任务正常执行(Celery命令参数没有错误,后台启动成功),但HTTP接口完全无响应、容器健康检查失败。
  2. 进程启动逻辑不符合Azure App Service容器运行规则
    把Gunicorn、Celery Worker、Celery Beat三个进程全部用&放到后台运行,启动脚本执行到末尾时Shell进程会直接退出,所有后台子进程会被系统回收;即使进程没有被回收,平台也会因为主进程没有持续前台运行、收不到预期的8000端口HTTP响应,判定容器启动失败。
修复步骤
  1. 修正startup.sh脚本内容
    脚本第一行添加标准Bash解释器声明,将Celery相关进程放到后台启动,最后用exec前缀前台启动Gunicorn,让Gunicorn成为容器主进程(PID=1),保证平台能正常探测端口、收集日志、传递运行信号。
    修正后的完整脚本内容如下:
#!/bin/bash
# 后台启动Celery Worker,日志输出到临时目录避免阻塞标准输出
celery -A api.celery worker -l info --logfile=/tmp/celery_worker.log &
# 后台启动Celery Beat
celery -A api.celery beat -l info --logfile=/tmp/celery_beat.log &
# 前台启动Gunicorn,监听0.0.0.0:8000
exec gunicorn --bind=0.0.0.0:8000 --timeout 600 api.wsgi
  1. 给脚本添加可执行权限
    本地项目根目录下执行chmod +x startup.sh后再重新部署,避免平台执行脚本时出现权限拒绝错误。
  2. 核对应用配置
    进入App Service > 配置 > 应用程序设置,确认没有自定义WEBSITES_PORT参数值,如果有自定义端口,需要把Gunicorn监听端口改成对应值。
验证方法
  • 先把启动命令临时改成单独的Gunicorn启动行gunicorn --bind=0.0.0.0:8000 --timeout 600 api.wsgi,重启服务确认管理后台、API接口能正常访问,排除Django项目本身的启动错误。
  • 确认Gunicorn正常后,再换回完整的startup.sh脚本配置重启,检查Celery定时任务执行状态、接口访问状态均正常即可。

内容的提问来源于stack exchange,提问作者Kllicks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:03:18