如何在Azure App Service用启动命令启动后台tmux会话?
Azure App Service自动启动tmux会话的解决办法
为啥原来的命令不行?
- 把tmux启动命令放在gunicorn后面:gunicorn是前台运行的阻塞程序,启动后会一直占用终端,后面的tmux命令根本没机会执行。
- 把tmux相关命令放gunicorn前面:要么是
apt-get安装tmux时遇到权限、网络或启动超时问题(Azure会直接终止超时的启动进程,还可能没留下有效日志),要么是tmux安装后gunicorn的启动环境出了问题,导致服务无法正常启动。
解决步骤
1. 编写统一启动脚本
创建start_app.sh文件,内容如下:
# 安装tmux(如果使用自定义Docker镜像,建议提前在镜像构建阶段安装,避免每次启动重复安装浪费时间) apt-get update && apt-get -y install tmux # 后台启动tmux会话并运行monitor脚本,给会话命名方便后续管理 tmux new-session -d -s monitor_session 'python manage.py monitor' # 以前台方式启动gunicorn(Azure App Service要求必须有前台进程维持服务运行,否则会判定服务未启动) gunicorn --bind=0.0.0.0 --workers=4 --timeout 600 app.wsgi
2. 配置Azure使用启动脚本
在Azure门户的App Service配置页面,将启动命令设置为:
bash start_app.sh
额外注意事项
- 优先提前安装tmux:每次启动都通过
apt-get安装会增加启动耗时,甚至触发Azure的启动超时限制。建议制作自定义Docker镜像,在镜像构建时就完成tmux的安装,启动脚本中可删除apt-get相关命令。 - 日志排查:如果问题仍存在,通过Azure门户的「日志流」功能查看容器日志和应用日志,大概率能捕获到
apt-get或tmux启动时的具体错误信息。
内容的提问来源于stack exchange,提问作者Wouter Vonk
相关产品推荐
相关产品推荐

