zoukankan      html  css  js  c++  java
  • flask + supervisor + gunicorn

    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

  • 相关阅读:
    疑似CPU或者内存故障导致进程崩溃
    free如何知道释放内存长度:vs与glibc分配内存时编译器内部处理
    stun简介
    H264(NAL简介与I帧判断)
    H264码率设置
    简单的makefile模板
    ffmpeg显示视频
    一些yuv视频下载地址
    转载:P2P技术原理及应用(2)
    转载:P2P技术原理及应用(1)
  • 原文地址:https://www.cnblogs.com/wxbn/p/12354531.html
Copyright © 2011-2022 走看看