Azure App Service部署时startup.sh文件找不到的问题排查与解决
解决方案
一、确认startup.sh是否已部署到Azure App Service
- 打开Kudu管理界面:访问
https://<你的应用名称>.scm.azurewebsites.net/ - 进入Debug console -> Bash,执行命令:
查看输出中是否包含ls /home/site/wwwrootstartup.sh。
如果文件不存在:
- 检查仓库的
.gitignore文件,确保没有将startup.sh添加到忽略列表中。 - 查看GitHub Actions的
azure.yml部署脚本,确认部署步骤是否正确包含根目录下的所有文件。例如使用azure/webapps-deploy@v2动作时,确保package参数指向./(根目录)。 - 查看Azure部署中心的部署日志,确认
startup.sh是否被成功上传。
二、修复路径与执行权限问题
如果文件已存在但仍报错:
修改启动命令为相对路径:
将原启动命令:chmod +x /home/site/wwwroot/startup.sh && /home/site/wwwroot/startup.sh替换为:
chmod +x ./startup.sh && ./startup.sh(App Service Linux容器的默认工作目录就是
/home/site/wwwroot,相对路径更可靠)修正脚本换行符格式:
将startup.sh的换行符改为Linux的LF格式(避免Windows CRLF导致的执行异常)。可以在VS Code中点击右下角的CRLF切换为LF,或通过git配置禁用自动转换:git config core.autocrlf false重新提交并推送脚本。
三、优化startup.sh脚本内容(解决后续潜在问题)
原脚本存在两个隐患,即使文件找到也可能导致启动失败:
- 缺少sudo权限:执行apt-get需要管理员权限,修改脚本为:
sudo apt-get update && sudo apt-get install -y libgl1-mesa-glx libglib2.0-0 - 硬编码端口:Azure App Service会通过
PORT环境变量指定监听端口,改为动态获取:gunicorn -k uvicorn.workers.UvicornWorker -b 0.0.0.0:$PORT app:app
修改后的完整startup.sh:
sudo apt-get update && sudo apt-get install -y libgl1-mesa-glx libglib2.0-0 gunicorn -k uvicorn.workers.UvicornWorker -b 0.0.0.0:$PORT app:app
四、验证部署
修改完成后重新推送代码到GitHub触发部署,然后查看Azure的日志流(App Service -> 监控 -> 日志流),确认启动过程无错误。
内容的提问来源于stack exchange,提问作者Lokmane ZEREG
相关产品推荐
相关产品推荐

