• 使用supervisor管理后台进程


    在linux中supervisor是用来管理后台进程的,是一个用python写的进程管理工具,可以让宕机的进程重启。这里我们大概讲一下用他来管理uWSGI。

    一.安装supervisor

    1.python2下的安装

    supervisor不支持python3,所以你安装可以使用自带的python2安装,但是自带的python2没有安装pip

    (1)要安装pip,首先要安装setuptools

    wget https://pypi.python.org/packages/ff/d4/209f4939c49e31f5524fa0027bf1c8ec3107abaf7c61fdaad704a648c281/setuptools-21.0.0.tar.gz#md5=81964fdb89534118707742e6d1a1ddb4
    
    tar xvf setuptools-21.0.0.tar.gz            //解压文件
    
    cd setuptools-21.0.0
    
    python setup.py install

    (2)安装pip

    wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz
    
    tar xvf pip-9.0.1.tar.gz 
    
    cd pip-9.0.1
    
    python setup.py install

    (3)安装supervisor

    pip install supervisor

    2.python3下的安装

    默认的pip安装的只支持python2,当然手动安装新版就支持python3了

    pip install git+https://github.com/Supervisor/supervisor

    二.配置supervisor

    生成 supervisor 默认配置文件,放在 /etc/supervisord.conf 路径中(如果出现echo_supervisord_conf: command not **found** 则可能需要输入全路径,使用
    find / -name supervisor*找到路径):

    echo_supervisord_conf > /etc/supervisord.conf

    修改配置文件

    # 修改配置文件
    vi /etc/supervisord.conf
    
    # 加入以下配置信息在最下面
    [include]
    files = /etc/supervisord.d/*.conf   # /etc/supervisord.d/下所有conf结尾的
        
    [inet_http_server] 
    port=127.0.0.1:9001  # 端口号
    username=user  # web登录名
    password=123  # 登录密码

    配置文件详情

     1 [unix_http_server]
     2 file=/tmp/supervisor.sock   ; UNIX socket 文件,supervisorctl 会使用
     3 ;chmod=0700                 ; socket 文件的 mode,默认是 0700
     4 ;chown=nobody:nogroup       ; socket 文件的 owner,格式: uid:gid
     5 ;username=user              ; default is no username (open server)
     6 ;password=123               ; default is no password (open server)
     7 
     8 ;[inet_http_server]         ; HTTP 服务器,提供 web 管理界面
     9 ;port=127.0.0.1:9001        ; Web 管理后台运行的 IP 和端口,如果开放到公网,需要注意安全性
    10 ;username=user              ; 登录管理后台的用户名
    11 ;password=123               ; 登录管理后台的密码
    12 
    13 [supervisord]
    14 logfile=/tmp/supervisord.log ; 日志文件,默认是 $CWD/supervisord.log
    15 logfile_maxbytes=50MB        ; 日志文件大小,超出会 rotate,默认 50MB
    16 logfile_backups=10           ; 日志文件保留备份数量默认 10
    17 loglevel=info                ; 日志级别,默认 info,其它: debug,warn,trace
    18 pidfile=/tmp/supervisord.pid ; pid 文件
    19 nodaemon=false               ; 是否在前台启动,默认是 false,即以 daemon 的方式启动
    20 minfds=1024                  ; 可以打开的文件描述符的最小值,默认 1024
    21 minprocs=200                 ; 可以打开的进程数的最小值,默认 200
    22 
    23 ; the below section must remain in the config file for RPC
    24 ; (supervisorctl/web interface) to work, additional interfaces may be
    25 ; added by defining them in separate rpcinterface: sections
    26 [rpcinterface:supervisor]
    27 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    28 
    29 [supervisorctl]
    30 serverurl=unix:///tmp/supervisor.sock ; 通过 UNIX socket 连接 supervisord,路径与 unix_http_server 部分的 file 一致
    31 ;serverurl=http://127.0.0.1:9001 ; 通过 HTTP 的方式连接 supervisord
    32 
    33 ;包含其他的配置文件
    34 [include]
    35 files = relative/directory/*.ini    ; 可以是 *.conf 或 *.ini
    View Code

    启动supervisor

    supervisord -c /etc/supervisord.conf

    再启动的时候可能会报错,Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord。

    解决的是方式:

    unlink /tmp/supervisor.sock

    通过http://ip:9001/访问web界面,账户名密码就是你配置的,效果如下

     三.加入监控程序

    新建管理的监控文件夹,每个程序设置配置文件,达到隔离的效果

    mkdir /etc/supervisord.d/

    在/etc/supervisor.d/目录下面加入需要管理的程序

    vi /etc/supervisor.d/orange_web.conf  # 新建一个管理程序
    
    # 程序的名字,在supervisor中可以用这个名字来管理该程序,随便起
    [program:orange_web]
    # 指定运行用户
    user = root
    # 启动程序的命令uwsgi启动命令
    command = uwsgi --ini /var/www/script/uwsgi.ini
    # 项目的目录
    directory = /var/www/orange_web
    # 开始的时候等待多少秒
    startsecs = 0
    # 停止的时候等待多少秒
    stopwaitsecs = 0
    # 设置改程序是否虽supervisor的启动而启动
    autorstart = true
    # 程序挂了是否需要重新将其启动
    autorestart = true
    # 是否将程序错误信息重定向到文件
    redirect_stderr=true
    # 输出的log文件位置
    stdout_logfile = /var/www/script/supervisord.log
    # 输出的错误文件位置
    stderr_logfile = /var/www/script/supervisord.err
    
    [supervisord]
    # log的级别
    loglevel = info

    重新启动supervisord

    supervisorctl reload  # 重启

    重新访问supervisor管理界面

    在这里就安装配置成功了,哈哈哈就可以去跟周围的女同学装逼了。。

    四.supervisor常用命令

    supervisorctl start programXX  # 启动进程programXX  
    
    supervisorctl stop programXX  # 停止进程programXX  
    
    supervisorctl restart programXX  # 重启进程programXX
    
    supervisorctl stop groupworker  # 停止所有名为groupworker这个分组的进程(start,restart都可用)
    
    supervisorctl stop all  # 停止所有进程(start,restart都可用,但是都不会载入最新的配置文件)
    
    supervisorctl reload  # 载入最新的配置文件,重载进程

    参考链接:

      supervisor    https://www.centos.bz/2018/05/%E4%BD%BF%E7%94%A8-supervisor-%E7%AE%A1%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%8E%E5%8F%B0%E8%BF%9B%E7%A8%8B/

      Django+uWSGI+Nginx部署  https://www.cnblogs.com/zzqit/p/10103303.html

                    https://www.jianshu.com/p/23762bd086e1

  • 相关阅读:
    justep w模型检查正常,编译出错
    php get post 发送与接收
    编译原理正则文本与有限状态机
    编译原理前端技术
    lucene早期版本基本概念
    golang panic和defer
    2021年1月阅读文章
    elasticsearch 中的fielddata 和 doc_values
    golang中的树
    elasticsearch中的wildcard
  • 原文地址:https://www.cnblogs.com/zzqit/p/10107195.html
Copyright © 2020-2023  润新知