ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

flask + supervisor + gunicorn

2020-03-07 09:00:26  阅读:264  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有