zoukankan      html  css  js  c++  java
  • Supervisor通用配置

    1、简介

    supervisor是python开发的一个进程管理工具,可以将一个普通的命令行进程变为后台的守护进程,并且监控进程的运行状态,如果因为异常退出的时候会自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

    • supervisord

    运行superior的时候会启动一个进程superiord,他主要是负责启动所管理的进程,并且将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃的时候自动重启

    • supervisorctl

    它是supervisor的命令行管理工具,可以执行stop,start,restart,status,update等指令,来对这些子进程进行管理。

    supervisor是所有进程的父进程,管理所有的子进程,supervisor以子进程的PID来管理子进程,当子进程异常退出的时候supervisor可以收到相应的信号量

    2、安装supervisor

    因为supervisor是基于python来运行的,所以我们的服务器上必须有python环境,但是如果你服务器上跑的是django或者其他的python项目必然基于python环境,如果supervisor管理的后台服务比较多的话肯定会有一些影响,所以supervisor的安装会创建一个新的虚拟环境。

    1、安装Python3.8.2

    # 下载python
    > wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz
    
    # 解压安装包
    > tar -xf Python-3.8.2.tar.xz
    
    # 进入目标文件
    > cd Python-3.8.2
    
    # 配置安装目录
    > ./configure --prefix=/usr/local/python3
    
    # 编译&安装
    > make && sudo make install
    
    # 建立软连接:python3,pip3
    > ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
    > ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3
    
    # 删除安装包与文件
    > rm -rf Python-3.8.2
    > rm -rf Python-3.8.2.tar.xz
    

    2、安装python虚拟环境

    # 1、安装工具包
    > pip3 install virtualenv
    > pip3 install virtualenvwrapper
    
    # 注意:有些解释器无法直接安装virtualenvwrapper包,可能是因为缺少依赖,可以先安装一下下面两个包
    > pip3 install pbr
    > pip3 install stevedore
    
    # 2、建立虚拟环境软链接
    > ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
    
    # 3、配置虚拟环境对应环境变量
    > vim ~/.bash_profile
    
    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    # 指定virtualenv的路径
    source /usr/local/bin/virtualenvwrapper.sh
    
    # 4、更新配置文件内容
    
    > source ~/.bash_profile
    
    所有的虚拟环境文件都指定存放在~/.virtualenvs 目录
    

    3、创建python虚拟环境

    # 1、创建虚拟环境
    > mkvirtualenv supervisor_env # 虚拟环境名称
    
    # 2、管理虚拟环境
    > workon  # 进入虚拟环境只需要在后面加上虚拟环境名称
    
    # 3、退出虚拟环境
    > deactivate
    

    4、supervisor安装

    # 安装
    > pip install supervisor
    
    # 生成配置文件
    > echo_supervisord_conf > supervisord.conf
    

    3、配置supervisor

    1、superiord.conf

    # 指定socket文件路径
    [unix_http_server]
    file=/root/work/manager/supervisor/supervisor.sock   ; the path to the socket file
    
    [supervisord]
    logfile=/root/work/manager/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
    logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
    logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
    loglevel=info                ; log level; default info; others: debug,warn,trace
    pidfile=/root/work/manager/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid
    nodaemon=false               ; start in foreground if true; default false
    silent=false                 ; no logs to stdout if true; default false
    minfds=1024                  ; min. avail startup file descriptors; default 1024
    minprocs=200                 ; min. avail process descriptors;default 200
    
    [supervisorctl]
    serverurl=unix:///root/work/manager/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
    
    # 指定分发所有子进程的配置目录,默认子进程配置文件为ini格式
    [include]
    files = conf.d/*.ini
    

    2、例:conf.d/onlydaya.ini

    将不同分类的子进程单独使用配置文件。下面的例子是后台启动uwsgi

    # 项目名称
    [program:onlydata]
    # 脚本目录
    directory=/root/work/code/python/onlydata
    # 脚本执行命令
    command=/root/.virtualenvs/onlydata/bin/uwsgi --ini /root/work/code/python/onlydata/onlydata/uwsgi.ini 
    # 日志输出
    stderr_logfile=/root/work/code/python/onlydata/uwsgi.err.log
    stdout_logfile=/root/work/code/python/onlydata/uwsgi.out.log 
    # 脚本运行的用户身份
    user=root
    stopsignal=INT
    # 这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
    startsecs=1
    

    3、配置文件详解

    - command:启动程序使用的命令,可以是绝对路径或者相对路径
    - process_name:一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)s
    - numprocs:Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1
    - numprocs_start:一个int偏移值,当启动实例的时候用来计算numprocs的值
    - priority:权重,可以控制程序启动和关闭时的顺序,权重越低:越早启动,越晚关闭。默认值是999
    - autostart:如果设置为true,当supervisord启动的时候,进程会自动重启。
    - autorestart:值可以是false、true、unexpected。false:进程不会自动重启,unexpected:当程序退出时的退出码不是exitcodes中定义的时,进程会重启,true:进程会无条件重启当退出的时候。
    - startsecs:程序启动后等待多长时间后才认为程序启动成功
    - startretries:supervisord尝试启动一个程序时尝试的次数。默认是3
    - exitcodes:一个预期的退出返回码,默认是0,2。
    - stopsignal:当收到stop请求的时候,发送信号给程序,默认是TERM信号,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。
    - stopwaitsecs:在操作系统给supervisord发送SIGCHILD信号时等待的时间
    - stopasgroup:如果设置为true,则会使supervisor发送停止信号到整个进程组
    - killasgroup:如果设置为true,则在给程序发送SIGKILL信号的时候,会发送到整个进程组,它的子进程也会受到影响。
    - user:如果supervisord以root运行,则会使用这个设置用户启动子程序
    - redirect_stderr:如果设置为true,进程则会把标准错误输出到supervisord后台的标准输出文件描述符。
    - stdout_logfile:把进程的标准输出写入文件中,如果stdout_logfile没有设置或者设置为AUTO,则supervisor会自动选择一个文件位置。
    - stdout_logfile_maxbytes:标准输出log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
    - stdout_logfile_backups:标准输出日志轮转备份的数量,默认是10,如果设置为0,则不备份
    - stdout_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
    - stdout_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发
    - stderr_logfile:把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为true
    - stderr_logfile_maxbytes:错误log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
    - stderr_logfile_backups:错误日志轮转备份的数量,默认是10,如果设置为0,则不备份
    - stderr_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
    - stderr_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发
    - environment:一个k/v对的list列表
    - directory:supervisord在生成子进程的时候会切换到该目录
    - umask:设置进程的umask
    - serverurl:是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url
    

    4、supervisor常用命令

    supervisorctl status        //查看所有进程的状态
    supervisorctl stop es       //停止es
    supervisorctl start es      //启动es
    supervisorctl restart       //重启es
    supervisorctl update        //配置文件修改后使用该命令加载新的配置
    supervisorctl reload        //重新启动配置中的所有程序
    

    也可以通过supervisorctl进入supervisor的shell界面,直接进行命令操作

    补充:

    systemctl start supervisord.service     //启动supervisor并加载默认配置文件
    systemctl enable supervisord.service    //将supervisor加入开机启动项
    

    启动supervisor之后就可以通过ip:9001访问supervisor的管理页面

  • 相关阅读:
    Thread
    投资
    DBLink
    sql
    列转行
    DataTable,DataView,DataRowView,DefaultView与DataSet
    Vue.js 基础学习之组件
    Vue.js 基础学习计算属性computed
    v-model的修饰符和使用
    Vue.js 基础学习 v-on 指令
  • 原文地址:https://www.cnblogs.com/Yang-Sen/p/13360229.html
Copyright © 2011-2022 走看看