在Centos7使用superviso

发布时间:2019-09-30 07:17:38编辑:auto阅读(2172)

    置顶:
    推荐使用pip install supervisor安装最新版supervisor,yum install supervisor最高版本3.1.4,有很多bug

    名称解释

    supervisor:要安装的软件的名称。
    supervisord:装好supervisor软件后,supervisord用于启动supervisor服务。
    supervisorctl:用于管理supervisor配置文件中program。

    使用yum安装

    yum install epel-release
    yum install supervisor
    
    systemctl enable supervisord.service # 开机自启动
    systemctl start supervisord.service # 启动supervisord服务
    systemctl status supervisord.service # 查看supervisord服务状态
    
    # 开启web服务:修改supervisord.conf ,inet_http_server节点取消注释。
    vim /etc/supervisord.conf 
    supervisorctl reload
    [inet_http_server]         ; inet (TCP) server disabled by default
    port=*:9001        ; (ip_address:port specifier, *:port for all iface)
    username=clark              ; (default is no username (open server))
    password=123456               ; (default is no password (open server))
    
    ps -ef|grep supervisord # 查看是否存在supervisord进程

    应用配置

    Supervisor 管理应用的进程,需要对每个应用进行配置。在 /etc/supervisord.d 中创建 helloworld.ini,每个应用对应一个配置文件即可。
    下面是配置文件的示例:

    [program:helloworld]  ;程序的名称
    command = dotnet HelloWorld.dll ;执行的命令
    directory = /root/www/ ;命令执行的目录
    environment = ASPNETCORE__ENVIRONMENT=Production  ;环境变量
    user = root  ;执行进程的用户
    stopsignal = INT  
    autostart = true  ;是否自动启动
    autorestart = true  ;是否自动重启
    startsecs = 1  ;自动重启间隔
    stderr_logfile = /var/log/helloworld.err.log  ;标准错误日志
    stdout_logfile = /var/log/helloworld.out.log  ;标准输出日志

    实际项目:

    supervisor部署:
    cd /etc/supervisord.d/
    
    vim product_new_merchant.ini
    
    [program:product_new_merchant]
    user = root
    directory = /root/data_hub/all_script
    command = /root/.virtualenvs/ProductNewMerchant/bin/python3.7 product_new_merchant.py
    autostart = true
    autorestart = true
    startsecs = 1
    environment = MYSQL_HOST="192.168.6.160",MYSQL_DATABASE="xxxxx",MYSQL_USER_NAME="xxxxxx",MYSQL_PASSWORD="xxxxx",MYSQL_PORT=3306,REDIS_HOST="192.168.95.55",LANG="en_US.utf8",LC_ALL="en_US.UTF-8",LC_LANG="en_US.UTF-8"
    stdout_logfile = /var/log/product_new_merchant.log
    redirect_stderr=true
    stopsignal = INT

    创建好配置文件后,重启 Supervisor

    supervisorctl reload

    或热重启,不会重启其他子进程

    supervisorctl reread
    
    supervisorctl update

    为确保没有错误,可以正常启动,使用前文提到的查看Supervisor状态的命令查看。或者查看要管理的进程是否启动,本例中可以使用下面的命令:

    ps -ef | grep HelloWorld.dll
    
    或
    ps -ef | grep dotnet

    可能遇到的问题

    1、我在网页上tail的时候,要不就是一直不返回,要不就是Error response
    Error code 410.
    Message: Gone.
    2、stderr_logfile和stdout_logfile 颠倒
    3、web界面中文乱码
    参考:https://www.crifan.com/upgrad...

    3.1.4老版本,升级最新版
    [root@web-95-55 admin]# supervisord --version
    3.1.4
    
    备份yum版本supervisor配置文件,供参考:
    
    yum remove supervisor
    yum remove python-meld3
    pip install supervisor
    mkdir /etc/supervisor
    echo_supervisord_conf > /etc/supervisor/supervisord.conf
    vim /etc/supervisor/supervisord.conf
    
    修改应用配置文件路径:
    ;[include]
    files = /etc/supervisor/config.d/*.ini
    
    mkdir /etc/supervisor/config.d
    cd /etc/supervisor/config.d
    启动supervisor:
    supervisord -c /etc/supervisor/supervisord.conf

    附:公司运维小哥笔记

    yum install supervisor -y
    supervisor 配置说明
    通过这种形式安装的supervisor,其配置文件的目录位于:
    /etc/supervisord.conf (主配置文件,下面会详细介绍)
    /etc/supervisor.d/ (默认子进程配置文件,也就是需要我们根据程序配置的地方)
    
    [unix_http_server]
    file=/home/supervisor/supervisor.sock   ; supervisorctl使用的 socket文件的路径
    ;chmod=0700                 ; 默认的socket文件权限0700
    ;chown=nobody:nogroup       ; socket文件的拥有者
    
    [inet_http_server]         ; 提供web管理后台管理相关配置
    port=0.0.0.0:9001          ; web管理后台运行的ip地址及端口,绑定外网需考虑安全性 
    ;username=root             ; web管理后台登录用户名密码
    ;password=root
    
    [supervisord]
    logfile=/var/log/supervisord.log ; 日志文件,默认在$CWD/supervisord.log
    logfile_maxbytes=50MB        ; 日志限制大小,超过会生成新文件,0表示不限制
    logfile_backups=10           ; 日志备份数量默认10,0表示不备份
    loglevel=info                ; 日志级别
    pidfile=/home/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid              ; pid文件
    nodaemon=false               ; 是否在前台启动,默认后台启动false
    minfds=1024                  ; 可以打开文件描述符最小值
    minprocs=200                 ; 可以打开的进程最小值
    
    [supervisorctl]
    serverurl=unix:///home/supervisor/supervisor.sock ; 通过socket连接supervisord,路径与unix_http_server->file配置的一致
    
    [include]
    files = supervisor.d/*.conf ;指定了在当前目录supervisor.d文件夹下配置多个配置文件
    
    定义supervisor管理进程配置文件
    
    [program:sboot] ;[program:xxx] 这里的xxx是指的项目名字
    directory = /opt/project  ;程序所在目录
    command =  java -jar springboot-hello-sample.jar ;程序启动命令
    autostart=true ;是否跟随supervisord的启动而启动
    autorestart=true; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
    stopasgroup=true;进程被杀死时,是否向这个进程组发送stop信号,包括子进程
    killasgroup=true;向进程组发送kill信号,包括子进程
    stdout_logfile=/var/log/sboot/supervisor.log;该程序日志输出文件,目录需要手动创建
    stdout_logfile_maxbytes = 50MB;日志大小
    stdout_logfile_backups  = 100;备份数
    
    
    service supervisord restart
    
    直接在命令行输入supervisorctl会展示当前已配置好的项目信息。
    [root@wangzh supervisor.d]# supervisorctl 
    sboot                            RUNNING   pid 27517, uptime 0:18:04
    supervisor> 
    
    
    然后可以执行
    start/stop/restart sboot 来简单控制项目的启停等
    
    supervisorctl update #更新配置文件
    supervisorctl reload #重新启动配置的程序
    supervisorctl stop all #停止全部管理进程

    参考:

    1、https://www.chengxulvtu.com/s...

    2、https://blog.csdn.net/DongGeG...

关键字