zoukankan      html  css  js  c++  java
  • 安装Supervisor到CentOS(YUM)

    Supervisor是一个Linux下进程管理工具。 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为守护进程,并监控进程状态,异常退出时能自动重启,可以实现程序的自我恢复。

    运行环境

    系统版本:CentOS Linux release 7.6.1810 (Core)
    软件版本:Python
    硬件要求:无

    安装过程

    1、安装Python

    Supervisor是Python的一个模块,所以我们需要先安装Python。

    [root@localhost ~]# yum -y install git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel
    [root@localhost ~]# git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    [root@localhost ~]# vim /etc/profile
    # pyenv
    export PYENV_ROOT="$HOME/.pyenv"
    export PATH=$HOME/.pyenv/bin:$PATH
    eval "$(pyenv init -)"
    [root@localhost ~]# source /etc/profile
    [root@localhost ~]# pyenv -v
    [root@localhost ~]# pyenv install --list
    [root@localhost ~]# for i in $(grep -r 'www.python.org' ~/.pyenv/*|awk -F ':' '{print $1}'|grep '^/');do sed -i 's#https://www.python.org/ftp/#https://npm.taobao.org/mirrors/#g' $i;done
    [root@localhost ~]# pyenv install 3.7.0
    [root@localhost ~]# pyenv versions
    * system (set by /root/.pyenv/version)
      3.7.0
    [root@localhost ~]# pyenv global 3.7.0
    [root@localhost ~]# python
    Python 3.6.9 (default, Apr  9 2020, 07:01:31) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> exit()
    

    2、安装Supervisor

    [root@localhost ~]# pip install supervisor
    

    3、创建Supervisor的配置文件

    Supervisor提供命令"echo_supervisord_conf"输出默认的模板配置信息,安装完成后我们需要手动创建主配置文件。

    [root@localhost ~]# echo_supervisord_conf > /etc/supervisord.conf
    

    4、查看Supervisor版本

    [root@localhost ~]# supervisord -v
    4.2.0
    

    使用Supervisor监管Nginx

    使用Supervisor监管Nginx,当Nginx发生意外故障退出时,自动重启Nginx服务,已实现自我恢复。

    1、创建Supervisor主配置文件

    创建Supervisor的主配置文件。
    如果将Supervisor的主配置文件存放到其他位置的话,则对"Supervisor"的所有操作都需要使用"-c"选项指定主配置文件。

    [root@localhost ~]# echo_supervisord_conf >/etc/supervisord.conf
    

    2、创建相关目录

    创建用于Supervisor工作目录,用于集中存放程序配置、日志等文件。

    [root@localhost ~]# mkdir -p /usr/local/supervisor/conf
    [root@localhost ~]# mkdir -p /usr/local/supervisor/logs/childlog
    [root@localhost ~]# mkdir -p /usr/local/supervisor/logs/nginxlog
    

    3、配置Supervisord

    Supervisord是Supervisor的服务端,提供对程序的监管服务。

    [root@localhost ~]# vim /etc/supervisord.conf
    [supervisord]
    logfile=/usr/local/supervisor/logs/supervisord.log       ; 日志文件路径.
    logfile_maxbytes=50MB                                    ; 日志最大大小.
    logfile_backups=10                                       ; 日志保留数量.
    loglevel=info                                            ; 日志级别.
    pidfile=/usr/local/supervisor/supervisord.pid            ; 进程PID文件.
    nodaemon=false                                           ; 进程非前台运行.
    silent=false                                             ; 输出Supervisord信息到日志而不是"stdout".
    minfds=1024                                              ; 打开文件数量限制.
    minprocs=200                                             ; 打开进程数量限制.
    umask=022                                                ; 进程生成文件权限掩码.
    user=root                                                ; 运行用户.
    identifier=supervisor                                    ; 进程标识符,由RPC接口调用时使用.
    directory=/usr/local/supervisor                          ; 工作主目录.
    nocleanup=true                                           ; 缓存日志自动清理.
    childlogdir=/usr/local/supervisor/logs/childlog          ; 被监管程序所产生的日志输出目录.
    ;environment=KEY="value"                                 ; 进程内部可以使用的环境变量.
    ;strip_ansi=false                                        ; 禁止在日志中添加ANSI转义码"
    ",多行日志.
    

    4、配置HTTP Server

    HTTP Server是Supervisor的管理端,提供对监管服务以及被监管程序的控制。管理员通过浏览器或者"supervisorctl"命令完成对Supervisor的管理控制。
    启用HTTP Server的方式有两种:
    "unix_http_server",开放一个UNIX域套接字,管理员可以通过这个套接字管理控制Supervisor。
    "inet_http_server",开放一个TCP套接字,管理员可以通过IP地址:端口的方式管理控制Supervisor。
    开启其中一个即可。

    [root@localhost ~]# vim /etc/supervisord.conf
    ;[unix_http_server]
    ;file=/tmp/supervisor.sock                               ; UNIX域套接字文件路径.
    
    [inet_http_server]
    port=0.0.0.0:9001                                        ; 监听地址和端口.
    username=user                                            ; 用户名.
    password=123                                             ; 密码.
    

    5、配置Supervisorctl

    Supervisorctl是Supervisor提供的一条命令行管理客户端,通过连接到HTTP Server,可以在命令行中使用命令"supervisorctl"实现对Supervisor的管理控制。

    [root@localhost ~]# vim /etc/supervisord.conf
    [supervisorctl]
    ;serverurl=unix:///tmp/supervisor.sock                   ; UNIX域套接字文件.
    serverurl=http://127.0.0.1:9001                          ; HTTP Server连接地址和端口.
    username=user                                            ; 连接所使用的用户名.
    password=123                                             ; 连接所使用的密码.
    prompt=mysupervisor                                      ; 提示信息.
    history_file=/usr/local/supervisor/.sc_history           ; 命令历史记录文件.
    

    6、独立程序配置

    使用"[include]"部分,可以将被监管的程序相关配置独立到另外一个文件中,以便于管理。

    [include]
    files=/usr/local/supervisor/conf/*.conf                  ; 在设置目录下检索其他独立配置文件.
    

    7、添加一个程序

    添加一个程序NGINX,NGINX将交由Supervisor监管。
    注:由于NGINX程序交由Supervisor托管,则NGINX必须在前台运行。

    [root@localhost ~]# vim /usr/local/supervisor/conf/nginx.conf
    [program:nginx]                                            ; 程序名.
    command=/usr/sbin/nginx -g 'daemon off;'                   ; 启动程序所使用的命令.
    process_name=%(program_name)s_%(process_num)02d            ; 程序进程名.
    numprocs=1                                                 ; 进程数量.
    directory=/usr                                             ; 工作目录.
    umask=022                                                  ; 进程生成文件权限掩码.
    priority=999                                               ; 程序启动优先级.
    
    autostart=true                                             ; 当"Supervisord"启动时自动启动该程序.
    startsecs=1                                                ; 完成启动等待时间.
    startretries=3                                             ; 启动程序重试次数.
    autorestart=true                                           ; 当程序因故障退出时自动重启程序.
    
    exitcodes=0                                                ; 程序退出状态码.
    stopsignal=TERM                                            ; 程序停止信号. 
    stopwaitsecs=10                                            ; 程序停止等待时间,超时则强制退出程序.
    stopasgroup=true                                           ; 停止程序进程组.
    killasgroup=true                                           ; 强制停止程序进程组.
    
    user=root                                                  ; 程序运行用户.
     
    redirect_stderr=true                                       ; 将"stderr"重定向到"stdout".
    stdout_logfile=/usr/local/supervisor/logs/nginxlog/nginx_stdout.log ; "stdout"输出到日志文件中.
    stdout_logfile_maxbytes=50MB                               ; stdout日志文件最大大小.
    stdout_logfile_backups=10                                  ; stdout日志文件保留数量.
    ;stdout_capture_maxbytes=0                                 ; 关闭stdout日志事件捕获功能.
    ;stdout_events_enabled=false                               ; 关闭stdout日志事件功能.
    ;stdout_syslog=false                                       ; 禁用将stdout输出到syslog.
    
    ;stderr_logfile=/usr/local/supervisor/logs/nginxlog/nginx_stderr.log  ; "stderr"输出到日志文件中.
    ;stderr_logfile_maxbytes=50MB                              ; stderr日志文件最大大小.
    ;stderr_logfile_backups=10                                 ; stderr日志文件保留数量.
    ;stderr_capture_maxbytes=0                                 ; 关闭stderr日志事件捕获功能.
    ;stderr_events_enabled=false                               ; 关闭stderr日志事件功能.
    ;stderr_syslog=false                                       ; 禁用将stderr输出到syslog.
    
    ;environment=A="1",B="2"                                   ; 程序内部使用的环境变量.
    ;serverurl=AUTO                                            ; HTTP Server连接地址.
    

    8、启动Supervisord服务

    [root@localhost ~]# supervisord -c /etc/supervisord.conf
    [root@localhost ~]# netstat -lnupt |grep 9001
    tcp        0      0 0.0.0.0:9001            0.0.0.0:*               LISTEN      16605/python3.7   
    [root@localhost ~]# tail -f /usr/local/supervisor/logs/supervisord.log 
    2020-06-11 08:38:52,474 INFO spawned: 'nginx_00' with pid 16606
    2020-06-11 08:38:53,526 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    

    9、查看程序运行状态

    [root@localhost ~]# supervisorctl status
    nginx:nginx_00                   RUNNING   pid 16606, uptime 0:04:18
    [root@localhost ~]# netstat -lnupt |grep nginx
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16606/nginx: master 
    tcp6       0      0 :::80                   :::*                    LISTEN      16606/nginx: master 
    

    10、模拟程序故障

    手动杀死Nginx进程,观测Nginx服务运行状态。
    我们可以通过日志查看到Nginx自动重启了一次,即被"Supervisor"监管的Nginx服务出现故障时,"Supervisor"会自动重启Nginx服务,实现Nginx的自我恢复。

    [root@localhost ~]# kill -15 16606
    [root@localhost ~]# tail -f /usr/local/supervisor/logs/supervisord.log 
    2020-06-11 08:38:52,474 INFO spawned: 'nginx_00' with pid 16606
    2020-06-11 08:38:53,526 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2020-06-11 08:46:19,987 INFO exited: nginx_00 (exit status 0; expected)
    2020-06-11 08:46:21,047 INFO spawned: 'nginx_00' with pid 16856
    2020-06-11 08:46:22,076 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    [root@localhost ~]# netstat -lnupt |grep nginx
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16856/nginx: master 
    tcp6       0      0 :::80                   :::*                    LISTEN      16856/nginx: master 
    [root@localhost ~]# supervisorctl status
    nginx:nginx_00                   RUNNING   pid 16856, uptime 0:02:54
    
  • 相关阅读:
    WCF 第四章 绑定 在多个绑定上暴露一个服务契约
    WCF 第五章 行为 事务跨操作事务流
    WCF 第五章 导出并发布元数据(服务行为)
    WCF 第五章 行为 通过配置文件暴露一个服务行为
    WCF 第五章 不支持会话的绑定的默认并发和实例
    WCF 第五章 并发和实例(服务行为)
    WCF 第五章 行为 总结
    WCF 第四章 绑定 绑定元素
    WCF 第五章 行为 事务之选择一个事务协议OleTx 或者WSAT
    WCF 第四章 绑定 比较各种绑定的性能和可扩展性
  • 原文地址:https://www.cnblogs.com/network-ren/p/13132204.html
Copyright © 2011-2022 走看看