zoukankan      html  css  js  c++  java
  • supervisor 简单使用

    一、介绍

    supervisor 是用 Python 开发的一个 C/S 服务。是 Linux/Unix 系统下的进程管理工具。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

    注意:只能用在Unix系统中,Windows用不了

    二、安装

    yum 方式

    #更新yum源
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    #yum安装
    yum install supervisor -y

    三、配置文件

    cat /etc/supervisord.conf

    [unix_http_server]
    file=/opt/supervisor.sock   ; supervisorctl 使用的 socket 文件
    chmod=0700                 ; socket 文件权限
    ;chown=nobody:nogroup       ; socket file uid:gid owner
    ;username=user              ; default is no username (open server)
    ;password=123               ; default is no password (open server)
    
    [inet_http_server]         ; web 管理界面,即在页面做重启、停止等操作
    port=*:9001                ; 监听端口
    username=admin             ; 用户
    password=123               ; 密码
    
    [supervisord]
    logfile=/var/log/supervisord.log ; supervisor日志文件 $CWD/supervisord.log
    logfile_maxbytes=50MB        ; 日志文件大小,默认 50MB
    logfile_backups=1           ; 默认保留1个文件
    loglevel=info                ; 日志级别,默认info; 其他格式: debug,warn,trace
    pidfile=/var/run/supervisord.pid ; pid 文件
    nodaemon=false               ; 是否在前台运行,默认false,以 daemon模式运行
    minfds=1024                  ; 可以打开文件描述符的最小值
    minprocs=200                 ; 可以打开进程数最小值
    ;umask=022                   ; process file creation umask; default 022
    ;user=chrism                 ; default is current user, required if root
    ;identifier=supervisor       ; supervisord identifier, default is 'supervisor'
    ;directory=/opt              ; default is not to cd during start
    ;nocleanup=true              ; don't clean up tempfiles at start; default false
    ;childlogdir=/opt            ; 'AUTO' child log dir, default $TEMP
    ;environment=KEY="value"     ; key value pairs to add to environment
    ;strip_ansi=false            ; strip ansi escape codes in logs; def. false
    
    
    [supervisorctl]
    serverurl=unix:///opt/supervisor.sock ; use a unix:// URL  for a unix socket
    ;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
    ;username=chris              ; should be same as in [*_http_server] if set
    ;password=123                ; should be same as in [*_http_server] if set
    ;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
    ;history_file=~/.sc_history  ; use readline history if available
    
    
    [include]
    files = /etc/supervisord.d/*.conf ;子文件

    四、修改配合文件

    vim /etc/supervisord.conf

       [inet_http_server] ; inet (TCP) server disabled by default
    
      port=0.0.0.0:9001 ; ip_address:port specifier, *:port for all iface
    
      username=user ; default is no username (open server)
    
      password=123 ; default is no password (open server)
    
      [include]
    
      files = /etc/supervisord.d/*.conf
    
      创建.conf目录     mkdir /etc/supervisord.d
    
      创建nginx配置文件  vim nginx.conf
    
      [program:nginx]
    
      autorestart=True
    
      autostart=True
    
      redirect_stderr=True
    
      ;environment=PATH=""  
    
      command=/usr/sbin/nginx -g 'daemon off;'
      sbin/nginx这条命令默认是后台启动,但是supervisor不能监控后台程序,所以supervisor就一直执行这个命令,导致nginx一直在重启,加上-g 'daemon off;'这个参数可解决这问题,这个参数的意思是在前台运行   user
    =root   ;process_name = %(program_name)s%(process_num)d   ;numprocs=3     ;directory=/root/   stdout_logfile_maxbytes=20MB   stdout_logfile_backups=20   ;stdout   stdout_logfile=/var/log/supervisor/nginx.log   stderr_logfile=/var/log/supervisor/nginx_error.log

    五、supervisord配置块详解

    - logfile:log文件路径
    - logfile_maxbytes:log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
    - logfile_backups:轮转日志备份的数量,默认是10,如果设置为0,则不备份
    - loglevel:error、warn、info、debug、trace、blather、critical
    - pidfile:pid文件路径
    - umask:umask值,默认022
    - nodaemon:如果设置为true,则supervisord在前台启动,而不是以守护进程启动
    - minfds:supervisord在成功启动前可用的最小文件描述符数量,默认1024
    - minprocs:supervisord在成功启动前可用的最小进程描述符数量,默认200
    - nocleanup:防止supervisord在启动的时候清除已经存在的子进程日志文件
    - childlogdir:自动启动的子进程的日志目录
    - user:supervisord的运行用户
    - directory:supervisord以守护进程运行的时候切换到这个目录
    - strip_ansi:消除子进程日志文件中的转义序列
    - environment:一个k/v对的list列表

    六、program配置详解

    - 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

     七、执行

    # supervisord -c /etc/supervisord.conf
    # supervisorctl

    # 重启supervisor
    # supervisorctl reload
  • 相关阅读:
    有趣的F-String
    停止使用非版本控制的可执行代码
    Django ORM中,如何使用Count来关联对象的子集数量
    Django Tastypie: 贴士,技巧和故障排除
    我实在不懂Python的Asyncio
    使用Let's Encrypt为网站加入SSL证书
    [debug]记一次竞态更新bug的解决
    我的web聊天之---序章
    我的音乐盒子(nodejs7 + koa2 + vue + vuex + vue-router)
    装饰器 生成器 进阶
  • 原文地址:https://www.cnblogs.com/angelyan/p/10984390.html
Copyright © 2011-2022 走看看