标签:supervisor gunicorn 配置文件 flask supervisord conf 客户端 log
supervisor 分为 客户端和服务端, 这里记录使用supervisor管理gunicorn测试机ubuntu16.04 + python3.6
supuervisor 属于系统级别的直接安装在 虚拟环境之外就可以
主要实现的是在虚拟环境中基于 Flask 框架 搭建一个web 应用,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程, 这里我主要记录Supervisor 进行进程管理
1 安装
pip install supervisor
2 生成默认的配置文件 建议放在自建配置目
cd /etc mkdir supervisor cd supervisor echo_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件
3 修改配置文件 启动一定指定配置文件绝对路径
vim supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 进程管理 在 supervisor.conf 配置文件底部添加 [program:myapp] 进程管理名称随便拟定 有时候和项目启动脚本重复时 会出现Bug command=/home/myproject/venv/bin/gunicorn -w4 -b0.0.0.0:8080 app:app ; supervisor启动命令 directory=/home/myproject ; 项目的文件夹路径 startsecs=0 ; 启动时间 stopwaitsecs=0 ; 终止等待时间 autostart=false ; 是否自动启动 autorestart=false ; 是否自动重启 stdout_logfile=/home/myproject/log/gunicorn.log ; log 日志 stderr_logfile=/home/myproject/log/gunicorn.err ; 错误日志
4 配置 web 管理界面
supervisor 还有一个 web 的管理界面,可以激活。更改下配置 客户端 (ctl 表示客户端 **d 表示服务端) [inet_http_server] ; inet (TCP) server disabled by default port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for alliface) username=wang ; (default is no username (open server) 登录客户端的账号 password=123 ; (default is no password (open server)) 登录客户端的密码 随便拟定 服务端与下面客户端配置必须一致 [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket username=wang ; should be same as http_username if set password=123 ; should be same as http_password if set ;prompt=mysupervisor ; cmd line prompt (default "supervisor") ;history_file=~/.sc_history ; use readline history if available
5 启动服务
supervisord -c /etc/supervisor/supervisord.conf 启动 同时启动的客户端和服务端 进入客户端 supervisorctl -c /etc/supervisor/supervisord.conf 1 基本操作 help status 察看supervisor的状态 reload 重新载入 配置文件 start [all]|[appname] 启动指定/所有 supervisor管理的程序进程 stop [all]|[appname] 关闭指定/所有 supervisor管理的程序进程 2 直接操作 supervisorctl -c /etc/supervisor/supervisord.conf status 察看supervisor的状态 supervisorctl -c /etc/supervisor/supervisord.conf reload 重新载入 配置文件 supervisorctl -c /etc/supervisor/supervisord.conf start [all]|[appname] 启动指定/所有 supervisor管理的程序进程 supervisorctl -c supervisor.conf stop [all]|[appname] 关闭指定/所有 supervisor管理的程序进程
注意事项:
1. 先确认[program:XXX]中自己的程序的command=<启动命令>和 directory=<运行命令的路径>没有问题,python是不是用的自己要的环境的python(比如虚拟环境的),log文件的文件夹是不是已经创建(没创建的话supervisor没权限生成log文件),以及改log文件是不是授权给所有用户了(可参考前面的解决办法chmod +x aaaaa.log)
2. 确保用上面的配置中的command在指定路径可以直接运行不会报错,这时候一般就不会有什么问题了。这时候tail你自己的log文件一般就能看到log信息,启动失败报错的信息也会在你的log文件中,照着解决后supervisorctl reload就好了。
3. 如果上面的命令确保可以跑,但还是没法正常运行,也看不到自己程序的报错(不然你就能根据报错解决问题了),那么恭喜,你遇到了跟我一样的情况。我的解决办法很诡异,尝试把[program:XXX]中的名字换成了一个跟启动命令不一样的另一个名字(不要太短),reload之后居然就可以跑了
参考:
https://www.jianshu.com/p/be9dd421fb8d
https://blog.csdn.net/kkevinyang/article/details/80539940
标签:supervisor,gunicorn,配置文件,flask,supervisord,conf,客户端,log 来源: https://www.cnblogs.com/wxbn/p/12354531.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。