zoukankan      html  css  js  c++  java
  • Supervisor 进程管理工具


    简介:

    Supervisor 进程管理工具

    一、安装

    shell > yum -y install python-pip
    
    shell > pip install supervisor
    
    # 这样就安装好了,注意:这货不支持 Python 3、用 yum 安装也有问题

    二、配置

    shell > echo_supervisord_conf > /etc/supervisord.conf
    
    # 生成配置文件到指定位置,报错的时候卸载原来的包装这个 meld3==0.6.7 [ pkg_resources.DistributionNotFound: meld3>=0.6.5 ]
    
    shell > grep -vP '^;|^$' /etc/supervisord.conf 
    
    [unix_http_server]
    file=/var/tmp/supervisor.sock      ; .sock 存放位置
    
    [supervisord]
    logfile=/var/log/supervisord.log   ; .log  存放位置
    logfile_maxbytes=50MB              ; 每个日志文件最大 50MB
    logfile_backups=10                 ; 保留10个备份
    loglevel=info                      ; 日志级别,info,debug,warn,trace
    pidfile=/var/run/supervisord.pid   ; .pid  存放位置
    nodaemon=false                     ; 守护进程方式启动
    minfds=1024                        ; 可以打开的文件描述符
    minprocs=200                       ; 可以启动的进程数
    
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    
    [supervisorctl]
    serverurl=unix:///var/tmp/supervisor.sock  ; .sock 存放位置
    
    # 稍微修改了一些默认项

    三、启动

    shell > supervisord -c /etc/supervisord.conf
    
    # 指定配置文件路径
    
    shell > ps aux | grep sup
    root        40  0.0  0.0      0     0 ?        S    15:49   0:00 [sync_supers]
    root      4044  0.0  0.1 199380 11164 ?        Ss   17:33   0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf

    四、启动一个自定义脚本

    shell > vim hello.sh
    
    #!/bin/bash
    
    for i in {1..10};do echo hello; sleep 1;done
    
    shell > chmod a+x hello.sh
    shell > vim /etc/supervisord.conf
    
    [program:hello]
    directory=/root               ; 运行程序时切换到指定目录
    command=/bin/bash hello.sh    ; 执行程序 ( 程序不能时后台运行的方式 )
    redirect_stderr=true          ; 标准错误输出重定向到标准输出
    stdout_logfile=hello.log      ; 指定日志文件路径,可以绝对路径 ( 相对路径 相对 directory= 指定的目录 )
    stdout_logfile_maxbytes=50MB  ; 文件切割大小
    stdout_logfile_backups=10     ; 保留的备份数
    
    # 加入程序启动配置
    shell > supervisorctl
    
    supervisor> help
    
    default commands (type help <topic>):
    =====================================
    add    exit      open  reload  restart   start   tail   
    avail  fg        pid   remove  shutdown  status  update 
    clear  maintail  quit  reread  signal    stop    version
    
    # 客户端工具提供一些指令 ( supervisorctl help 这样运行也是可以的 )
    
    supervisor> update
    hello: added process group
    
    # 自动重启配置文件发生改变的进程
    
    supervisor> start hello
    hello: started
    
    supervisor> status
    hello                            RUNNING   pid 4125, uptime 0:00:04
    
    # 反正就是这几个指令,启动后脚本的输出会被记录到 stdout_logfile= 指定的日志文件中
    
    # 现在的情况是,程序执行一次就退出了
    
    supervisor> status
    hello                            EXITED    Dec 01 06:02 PM
    
    supervisor> exit
    shell > vim /etc/supervisord.conf
    
    [program:hello]
    directory=/root
    command=/bin/bash hello.sh
    autostart=true                ; 程序随 supervisord 启动而启动
    startsecs=10                  ; 程序启动 10 后没有退出,认为程序启动成功 
    startretries=3                ; 启动失败重试次数
    autorestart=true              ; 程序退出后自动启动,false 不启动、unexpected 只有退出状态码为 exitcodes= 指定的值是才自动启动
    redirect_stderr=true
    stdout_logfile=hello.log
    stdout_logfile_maxbytes=50MB  
    stdout_logfile_backups=10
    
    # 添加一些配置,重新来过
    
    supervisor> update
    hello: stopped
    hello: updated process group
    
    # 注意:这次会时间长一点,因为设置了 startsecs=10,也就是说 10 秒后才能 status 看到进程状态
    
    # 这次程序就会自动重启了
    shell > vim /etc/supervisord.conf
    
    [program:hello]
    directory=/root
    command=/bin/bash hello.sh
    process_name=%(program_name)s_%(process_num)02d  ; 启动多个进程时设置不同的进程名
    numprocs=2                                       ; 启动几个进程
    autostart=true
    startsecs=5
    startretries=3
    autorestart=true
    redirect_stderr=true
    stdout_logfile=hello.log
    stdout_logfile_maxbytes=50MB
    stdout_logfile_backups=10
    
    # 又加了启动多个进程的配置
    
    supervisor> update
    hello: stopped
    hello: updated process group
    
    supervisor> status
    hello:hello_00                   RUNNING   pid 4899, uptime 0:00:09
    hello:hello_01                   RUNNING   pid 4898, uptime 0:00:09
    
    # 这次长这样了..
    
    supervisor> stop all
    hello:hello_00: stopped
    hello:hello_01: stopped
    
    supervisor> status
    hello:hello_00                   STOPPED   Dec 01 06:27 PM
    hello:hello_01                   STOPPED   Dec 01 06:27 PM
    
    # 好了收工!
  • 相关阅读:
    MacBook下java环境的搭建
    Mac 终端下Homebrew的几个常用命令(新手笔记)
    新手学Appium_Python_Client
    【转】pycharm的一些快捷键
    解决YUM下Loaded plugins: fastestmirror Determining fastest mirrors 的问题
    chrome扩展第三方浏览器下载安装
    php异或加密解密算法的实现
    TortoiseGit客户端密钥配置
    CURL重试发送请求
    关于接收POST请求 $GLOBALS['HTTP_RAW_POST_DATA']
  • 原文地址:https://www.cnblogs.com/wangxiaoqiangs/p/7943979.html
Copyright © 2011-2022 走看看