zoukankan      html  css  js  c++  java
  • Linux 进程管理器 supervixor

    使用 supervisor 管理进程

    http://www.cnblogs.com/smail-bao/p/5673434.html

    http://ju.outofmemory.cn/entry/201847

    http://cpper.info/2016/04/14/supervisor-usage.html

    http://xitongjiagoushi.blog.51cto.com/9975742/1710321

    http://liyangliang.me/posts/2015/06/using-supervisor/

    这个可是一个好东西,以后再也不用 nohup  XXXX &  了。有了它,妈妈再也不用担心我的学习了

    我这里用[root@git logs]# easy_install supervisor的方式安装,之前我也试过用pip的方式安装,但是我装好之后,创建配置文件的时候报错了,

    一直也没有找到原因,希望哪位朋友看到的时候帮忙和我说一下,谢谢

    或者是源码安装

     wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz --no-check-certificat

    tar zxf supervisor-3.1.3.tar.gz

    cd supervisor-3.1.3

    python setup.py install

    /usr/local/bin/echo_supervisord_conf >> /etc/supervisord.conf

    装好之后

    生成配置文件

    echo_supervisord_conf > /etc/supervisord.conf

    我们现在多虑一下看看里面有哪些有效内容

    [root@zabbix ansible]# cat supervisord.conf | grep -v "^;" | grep -v "^$"
    [unix_http_server]
    file=/tmp/supervisor.sock ; (the path to the socket file)
    [supervisord]
    user=root
    logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
    logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
    logfile_backups=10 ; (num of main logfile rotation backups;default 10)
    loglevel=info ; (log level;default info; others: debug,warn,trace)
    pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    nodaemon=false ; (start in foreground if true;default false)
    minfds=1024 ; (min. avail startup file descriptors;default 1024)
    minprocs=200 ; (min. avail process descriptors;default 200)
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    [supervisorctl]
    serverurl=unix:///tmp/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
    ###为了不将所有新增配置信息全写在一个配置文件里,这里新建一个文件夹,每个程序设置一个配置文件,相互隔离
    mkdir /etc/supervisord.d/  
    
    ### 修改配置文件
    vim /etc/supervisord.conf
    
    ### 加入以下配置信息
    [include]
    files = /etc/supervisord.d/*.conf
    
    ### 在supervisord.conf中设置通过web可以查看管理的进程,加入以下代码(默认即有,取消注释即可)    
    [inet_http_server] 
    port=9001
    username=user      
    password=123

    然后我们这里就可以使用http://IP:9001来登陆管理界面

    这里我们可以选择使用脚本来启动,停止supervisor

    启动脚本为
    1. wget https://github.com/Supervisor/initscripts/raw/master/redhat-init-mingalevme
    [root@zabbix ~]# cat /etc/init.d/supervisor 
    #!/bin/bash
    #
    # supervisord This scripts turns supervisord on
    #
    # Author: Mike McGrath <mmcgrath@redhat.com> (based off yumupdatesd)
    # Jason Koppe <jkoppe@indeed.com> adjusted to read sysconfig,
    # use supervisord tools to start/stop, conditionally wait
    # for child processes to shutdown, and startup later
    # Mikhail Mingalev <mingalevme@gmail.com> Merged
    # redhat-init-jkoppe and redhat-sysconfig-jkoppe, and
    # made the script "simple customizable".
    # Brendan Maguire <maguire.brendan@gmail.com> Added OPTIONS to
    # SUPERVISORCTL status call
    #
    # chkconfig: 345 83 04
    #
    # description: supervisor is a process control utility. It has a web based
    # xmlrpc interface as well as a few other nifty features.
    # Script was originally written by Jason Koppe <jkoppe@indeed.com>.
    #

    # source function library
    . /etc/rc.d/init.d/functions

    set -a

    PREFIX=/usr/local

    SUPERVISORD=$PREFIX/bin/supervisord
    SUPERVISORCTL=$PREFIX/bin/supervisorctl

    PIDFILE=/var/run/supervisord.pid
    LOCKFILE=/var/lock/subsys/supervisord

    OPTIONS="-c /etc/supervisord.conf"

    # unset this variable if you don't care to wait for child processes to shutdown before removing the $LOCKFILE-lock
    WAIT_FOR_SUBPROCESSES=yes

    # remove this if you manage number of open files in some other fashion
    ulimit -n 96000

    RETVAL=0


    running_pid()
    {
    # Check if a given process pid's cmdline matches a given name
    pid=$1
    name=$2
    [ -z "$pid" ] && return 1
    [ ! -d /proc/$pid ] && return 1
    (cat /proc/$pid/cmdline | tr "00" " "|grep -q $name) || return 1
    return 0
    }

    running()
    {
    # Check if the process is running looking at /proc
    # (works for all users)

    # No pidfile, probably no daemon present
    [ ! -f "$PIDFILE" ] && return 1
    # Obtain the pid and check it against the binary name
    pid=`cat $PIDFILE`
    running_pid $pid $SUPERVISORD || return 1
    return 0
    }

    start() {
    echo "Starting supervisord: "

    if [ -e $PIDFILE ]; then
    echo "ALREADY STARTED"
    return 1
    fi

    # start supervisord with options from sysconfig (stuff like -c)
    $SUPERVISORD $OPTIONS

    # show initial startup status
    $SUPERVISORCTL $OPTIONS status

    # only create the subsyslock if we created the PIDFILE
    [ -e $PIDFILE ] && touch $LOCKFILE
    }

    stop() {
    echo -n "Stopping supervisord: "
    $SUPERVISORCTL $OPTIONS shutdown
    if [ -n "$WAIT_FOR_SUBPROCESSES" ]; then
    echo "Waiting roughly 60 seconds for $PIDFILE to be removed after child processes exit"
    for sleep in 2 2 2 2 4 4 4 4 8 8 8 8 last; do
    if [ ! -e $PIDFILE ] ; then
    echo "Supervisord exited as expected in under $total_sleep seconds"
    break
    else
    if [[ $sleep -eq "last" ]] ; then
    echo "Supervisord still working on shutting down. We've waited roughly 60 seconds, we'll let it do its thing from here"
    return 1
    else
    sleep $sleep
    total_sleep=$(( $total_sleep + $sleep ))
    fi

    fi
    done
    fi

    # always remove the subsys. We might have waited a while, but just remove it at this point.
    rm -f $LOCKFILE
    }

    restart() {
    stop
    start
    }

    case "$1" in
    start)
    start
    RETVAL=$?
    ;;
    stop)
    stop
    RETVAL=$?
    ;;
    restart|force-reload)
    restart
    RETVAL=$?
    ;;
    reload)
    $SUPERVISORCTL $OPTIONS reload
    RETVAL=$?
    ;;
    condrestart)
    [ -f $LOCKFILE ] && restart
    RETVAL=$?
    ;;
    status)
    $SUPERVISORCTL $OPTIONS status
    if running ; then
    RETVAL=0
    else
    RETVAL=1
    fi
    ;;
    *)
    echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
    exit 1
    esac

    exit $RETVAL





  • 相关阅读:
    Java8 lambda表达式语法 1
    Spring WebMVC 4.1返回json时 406(Not Acceptable)
    上传 第三方jar包 nexus
    Nexus 使用配置
    Nexus 安装 使用说明
    mysql 常用命令
    JedisPoolConfig配置
    tomcat 管理端 安全措施
    Java ReentrantLock和synchronized两种锁定机制的对比
    spring 在web容器启动时执行初始化方法
  • 原文地址:https://www.cnblogs.com/smail-bao/p/5601175.html
Copyright © 2011-2022 走看看