[求助] flask 部署, supervisor 配置出现问题,不能正常运行,需要 dalao 们指点迷津,谢谢! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Pooc

[求助] flask 部署, supervisor 配置出现问题,不能正常运行,需要 dalao 们指点迷津,谢谢!

  •  
  •   Pooc 2018 年 6 月 28 日 6158 次点击
    这是一个创建于 2858 天前的主题,其中的信息可能已经有所发展或是发生改变。

    [环境] :centos+supervisor+gunicorn+flask

    在 /www/blog 目录下,运行是正常的

    /www/blog/venv/bin/gunicorn -b 0.0.0.0:5000 -w 4 microblog:app 

    [状态] :添加到 supervisor 配置中却一直重复在 running

    $ supervisorctl status microblog RUNNING pid 12499, uptime 0:00:02 

    [配置] 如下:

    [supervisord] http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server) logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) logfile_backups=10 ; (num of main logfile rotation backups;default 10) loglevel=info ; (logging level;default info; others: debug,warn) pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) nodaemon=false ; (start in foreground if true;default false) minfds=1024 ; (min. avail startup file descriptors;default 1024) minprocs=200 ; (min. avail process descriptors;default 200) [supervisorctl] serverurl=unix:///var/tmp/supervisor.sock ; use a unix:// URL for a unix socket [program:microblog] command=/www/blog/venv/bin/gunicorn -b 0.0.0.0:5000 -w 4 microblog:app directory=/www/blog user=root autostart=true autorestart=true stopasgroup=true killasgroup=true 
    19 条回复    2018-07-02 18:06:32 +08:00
    ericls
        1
    ericls  
       2018 年 6 月 28 日   1
    log?
    defunct9
        2
    defunct9  
       2018 年 6 月 28 日 via iPad   3
    开 ssh,让我上去看看
    0xABCD
        3
    0xABCD  
       2018 年 6 月 28 日 via Android   1
    日志贴出来
    knktc
        4
    knktc  
       2018 年 6 月 28 日 via iPhone   1
    不是和 venv 有关系?
    yylucifer
        5
    yylucifer  
       2018 年 6 月 28 日   1
    没 log 我只能等 dalao 来 review 你的配置了..
    summerwar
        6
    summerwar  
       2018 年 6 月 28 日   1
    话说 running 不是运行中的意思吗?是网站打不开还是
    tempdban
        7
    tempdban  
       2018 年 6 月 28 日 via Android   1
    兄弟你用了 venv 你环境变量却没设置啊
    robinlovemaggie
        8
    robinlovemaggie  
       2018 年 6 月 28 日   1
    不用用 root 去跑非系统程序,不用用 root 去跑非系统程序,不用用 root 去跑非系统程序……
    ps: supervisor 官网文档了解一下?
    bolide2005
        9
    bolide2005  
       2018 年 6 月 28 日   1
    running 有啥问题啊…… running 是正常运行中
    Pooc
        10
    Pooc  
    OP
       2018 年 6 月 29 日
    @ericls @0xABCD @yylucifer /var/tmp 下的日志是空的。。。
    @defunct9 小哥,怎么联系。。。
    @knktc @tempdban 我也觉得是很 venv 有关系,但是我添加了环境变量了,在 venv 在没有进入 venv 的情况下能正常使用。。。在 venv/bin/activate 跟 /etc/profile 都添加了 export FLASK_APP=microblog.py 会不会是这个有误?
    @summerwar @bolide2005 running 几秒钟就重复 start,running,block。。。
    Pooc
        11
    Pooc  
    OP
       2018 年 6 月 29 日
    @robinlovemaggie 是的,老哥,的确是不要在 root 下跑非系统程序。。。
    knktc
        12
    knktc  
       2018 年 6 月 29 日   1
    @Pooc 这个其实不会执行 active 脚本的,所以我感觉修改 active 脚本没有用处的。
    我感觉不行就是得给 supervisor 的 program 配置中加入 envirOnment=PATH="/www/blog/venv/bin" 这样环境配置试试
    tempdban
        13
    tempdban  
       2018 年 6 月 29 日 via Android   1
    program: microblog
    里面可以加环境变量
    加的是 VIRTUAL_ENV
    你仔细看看 venv/bin/activate
    都干了啥
    tempdban
        14
    tempdban  
       2018 年 6 月 29 日 via Android   1
    所有的 Python venv 方案都要改 VIRTUAL_ENV 环境变量
    Pooc
        15
    Pooc  
    OP
       2018 年 6 月 29 日
    @ericls @0xABCD @yylucifer
    日志找到了。。。原来我看错了,是在 logfile=/var/log/supervisor/supervisord.log

    ```
    2018-06-29 17:07:08,984 CRIT Running without any HTTP authentication checking
    2018-06-29 17:07:08,989 INFO daemonizing the process
    2018-06-29 17:07:08,991 INFO supervisord started with pid 5375
    2018-06-29 17:07:08,995 INFO spawned: 'microblog' with pid 5376
    2018-06-29 17:07:09,866 INFO exited: microblog (exit status 3; not expected)
    2018-06-29 17:07:09,867 INFO received SIGCLD indicating a child quit
    2018-06-29 17:07:10,870 INFO spawned: 'microblog' with pid 5382
    2018-06-29 17:07:11,864 INFO exited: microblog (exit status 3; not expected)
    2018-06-29 17:07:11,865 INFO received SIGCLD indicating a child quit
    2018-06-29 17:07:13,871 INFO spawned: 'microblog' with pid 5389
    2018-06-29 17:07:14,576 INFO exited: microblog (exit status 1; not expected)
    2018-06-29 17:07:14,576 INFO received SIGCLD indicating a child quit
    2018-06-29 17:07:17,581 INFO spawned: 'microblog' with pid 5396
    2018-06-29 17:07:18,413 INFO exited: microblog (exit status 1; not expected)
    2018-06-29 17:07:18,413 INFO received SIGCLD indicating a child quit
    2018-06-29 17:07:19,414 INFO gave up: microblog entered FATAL state, too many start retries too quickly
    2018-06-29 17:33:58,601 CRIT Supervisor running as root (no user in config file)
    2018-06-29 17:33:58,635 INFO localhost:0 - - [29/Jun/2018:09:33:58 +0800] "GET / HTTP/1.0" 200 2204
    2018-06-29 17:35:16,200 CRIT Supervisor running as root (no user in config file)
    2018-06-29 17:35:16,232 INFO localhost:0 - - [29/Jun/2018:09:35:16 +0800] "GET / HTTP/1.0" 200 2204
    2018-06-29 17:37:37,650 CRIT received SIGTERM indicating exit request
    2018-06-29 17:37:58,299 CRIT Supervisor running as root (no user in config file)
    2018-06-29 17:37:58,311 INFO /var/tmp/supervisor.sock:Medusa (V1.1.1.1) started at Fri Jun 29 17:37:58 2018
    Hostname: <unix domain socket>
    Port:/var/tmp/supervisor.sock
    2018-06-29 17:37:58,363 CRIT Running without any HTTP authentication checking
    2018-06-29 17:37:58,365 INFO daemonizing the process
    2018-06-29 17:37:58,366 INFO supervisord started with pid 5702
    2018-06-29 17:37:58,368 INFO spawned: 'microblog' with pid 5703
    2018-06-29 17:37:58,851 INFO exited: microblog (exit status 3; not expected)
    2018-06-29 17:37:58,852 INFO received SIGCLD indicating a child quit
    2018-06-29 17:37:59,855 INFO spawned: 'microblog' with pid 5707
    2018-06-29 17:38:0,681 INFO exited: microblog (exit status 3; not expected)
    2018-06-29 17:38:00,682 INFO received SIGCLD indicating a child quit
    2018-06-29 17:38:02,687 INFO spawned: 'microblog' with pid 5713
    2018-06-29 17:38:03,381 INFO exited: microblog (exit status 3; not expected)
    2018-06-29 17:38:03,381 INFO received SIGCLD indicating a child quit
    2018-06-29 17:38:06,386 INFO spawned: 'microblog' with pid 5720
    2018-06-29 17:38:07,114 INFO exited: microblog (exit status 1; not expected)
    2018-06-29 17:38:07,114 INFO received SIGCLD indicating a child quit
    2018-06-29 17:38:08,115 INFO gave up: microblog entered FATAL state, too many start retries too quickly
    2018-06-29 17:38:53,721 INFO localhost:0 - - [29/Jun/2018:09:38:53 +0800] "POST /RPC2 HTTP/1.0" 200 254
    2018-06-29 17:38:53,724 INFO localhost:0 - - [29/Jun/2018:09:38:53 +0800] "POST /RPC2 HTTP/1.0" 200 1242
    2018-06-29 17:38:56,321 INFO localhost:0 - - [29/Jun/2018:09:38:56 +0800] "POST /RPC2 HTTP/1.0" 200 254
    2018-06-29 17:38:56,325 INFO localhost:0 - - [29/Jun/2018:09:38:56 +0800] "POST /RPC2 HTTP/1.0" 200 1242
    2018-06-29 17:39:00,612 INFO localhost:0 - - [29/Jun/2018:09:39:00 +0800] "POST /RPC2 HTTP/1.0" 200 254
    2018-06-29 17:39:00,614 INFO localhost:0 - - [29/Jun/2018:09:39:00 +0800] "POST /RPC2 HTTP/1.0" 200 1242
    2018-06-29 17:45:58,505 INFO localhost:0 - - [29/Jun/2018:09:45:58 +0800] "POST /RPC2 HTTP/1.0" 200 254
    2018-06-29 17:45:58,509 INFO localhost:0 - - [29/Jun/2018:09:45:58 +0800] "POST /RPC2 HTTP/1.0" 200 1242

    ```
    defunct9
        16
    defunct9  
       2018 年 6 月 29 日 via iPhone   1
    微信:defunct
    robinlovemaggie
        17
    robinlovemaggie  
       2018 年 6 月 29 日   1
    用 pyenv 隔离一套 python 环境,保证 python,venv,程序目录和 supervisor 在同一用户下,这是算是最理想的部署环境。
    defunct9
        18
    defunct9  
       2018 年 7 月 1 日 via iPhone   1
    搞定,mark 一下,走人。
    Pooc
        19
    Pooc  
    OP
       2018 年 7 月 2 日
    @defunct9 多谢老哥帮助!!!
    其实是跟 @robinlovemaggie 老哥你的想法一致,也跟上面的各位 dalao 想法一致的。
    我把 @defunct9 老哥解决方法说一下,以便后面的同学能及时处理这个问题。

    @defunct9 原话:
    原因是 venv 跟 gunicorn 必须是同一个 shell 引导,否则无法继承环境变量。

    解决方法:
    ```
    # cat /etc/supervisord.conf
    [supervisord]
    http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server)
    logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
    logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
    logfile_backups=10 ; (num of main logfile rotation backups;default 10)
    loglevel=info ; (logging level;default info; others: debug,warn)
    pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    nodaemon=false ; (start in foreground if true;default false)
    minfds=1024 ; (min. avail startup file descriptors;default 1024)
    minprocs=200 ; (min. avail process descriptors;default 200)

    [supervisorctl]
    serverurl=unix:///var/tmp/supervisor.sock ; use a unix:// URL for a unix socket

    [program:microblog]
    command=/www/blog/venv/bin/gunicorn_start
    directory=/www/blog
    user=root
    autostart=true
    autorestart=true
    stopasgroup=true
    killasgrouv=true
    stdout_logfile=/www/blog/logs/microblog.log
    redirect_stderr=true


    # cat /www/blog/venv/bin/gunicorn_start
    #!/bin/sh

    export FLASK_APP=microblog.py

    cd /www/blog/
    source venv/bin/activate
    /www/blog/venv/bin/gunicorn -b localhost:3000 -w 4 microblog:app

    ```
    直接通过一个 sh 脚本处理同一个 shell 引导,
    这个时候由 gunicorn 启动的 microblog 应用服务器现在运行在本地端口 3000,
    然我再设置一下 Nginx 就可以将应用程序暴露给外部世界。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     950 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 61ms UTC 22:40 PVG 06:40 LAX 15:40 JFK 18:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86