zoukankan      html  css  js  c++  java
  • 安装supervisor(4.0.3)

    #安装4.0.3最新版

    pip install supervisor -i http://pypi.douban.com/simple

    #/etc/init.d/supervisor文件写入开机自启动脚本

    #! /bin/sh
    #
    # skeleton      example file to build /etc/init.d/ scripts.
    #               This file should be used to construct scripts for /etc/init.d.
    #
    #               Written by Miquel van Smoorenburg <miquels@cistron.nl>.
    #               Modified for Debian
    #               by Ian Murdock <imurdock@gnu.ai.mit.edu>.
    #               Further changes by Javier Fernandez-Sanguino <jfs@debian.org>
    #
    # Version:      @(#)skeleton  1.9  26-Feb-2001  miquels@cistron.nl
    #
    ### BEGIN INIT INFO
    # Provides:          supervisor
    # Required-Start:    $remote_fs $network $named
    # Required-Stop:     $remote_fs $network $named
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Start/stop supervisor
    # Description:       Start/stop supervisor daemon and its configured
    #                    subprocesses.
    ### END INIT INFO
    
    . /lib/lsb/init-functions
    
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    DAEMON=/usr/local/bin/supervisord
    NAME=supervisord
    DESC=supervisor
    
    test -x $DAEMON || exit 0
    
    LOGDIR=/var/log/supervisor
    PIDFILE=/var/run/$NAME.pid
    DODTIME=5                   # Time to wait for the server to die, in seconds
                                # If this value is set too low you might not
                                # let some servers to die gracefully and
                                # 'restart' will not work
    
    # Include supervisor defaults if available
    if [ -f /etc/default/supervisor ] ; then
            . /etc/default/supervisor
    fi
    DAEMON_OPTS="-c /etc/supervisor/supervisord.conf $DAEMON_OPTS"
    
    set -e
    
    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 $DAEMON || return 1
        return 0
    }
    
    force_stop() {
    # Forcefully kill the process
        [ ! -f "$PIDFILE" ] && return
        if running ; then
            kill -15 $pid
            # Is it really dead?
            [ -n "$DODTIME" ] && sleep "$DODTIME"s
            if running ; then
                kill -9 $pid
                [ -n "$DODTIME" ] && sleep "$DODTIME"s
                if running ; then
                    echo "Cannot kill $LABEL (pid=$pid)!"
                    exit 1
                fi
            fi
        fi
        rm -f $PIDFILE
        return 0
    }
    
    case "$1" in
      start)
            echo -n "Starting $DESC: "
            start-stop-daemon --start --quiet --pidfile $PIDFILE 
                    --startas $DAEMON -- $DAEMON_OPTS
            test -f $PIDFILE || sleep 1
            if running ; then
                echo "$NAME."
            else
                echo " ERROR."
            fi
            ;;
      stop)
            echo -n "Stopping $DESC: "
            start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE 
            echo "$NAME."
            ;;
      force-stop)
            echo -n "Forcefully stopping $DESC: "
            force_stop
            if ! running ; then
                echo "$NAME."
            else
                echo " ERROR."
            fi
            ;;
      #reload)
            #
            #       If the daemon can reload its config files on the fly
            #       for example by sending it SIGHUP, do it here.
            #
            #       If the daemon responds to changes in its config file
            #       directly anyway, make this a do-nothing entry.
            #
            # echo "Reloading $DESC configuration files."
            # start-stop-daemon --stop --signal 1 --quiet --pidfile 
            #       /var/run/$NAME.pid --exec $DAEMON
      #;;
      force-reload)
            #
            #       If the "reload" option is implemented, move the "force-reload"
            #       option to the "reload" entry above. If not, "force-reload" is
            #       just the same as "restart" except that it does nothing if the
            #   daemon isn't already running.
            # check wether $DAEMON is running. If so, restart
            start-stop-daemon --stop --test --quiet --pidfile $PIDFILE 
            --startas $DAEMON 
            && $0 restart 
            || exit 0
            ;;
      restart)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
            [ -n "$DODTIME" ] && sleep $DODTIME
            start-stop-daemon --start --quiet --pidfile $PIDFILE 
                    --startas $DAEMON -- $DAEMON_OPTS
            echo "$NAME."
            ;;
      status)
        echo -n "$LABEL is "
        if running ;  then
            echo "running"
        else
            echo " not running."
            exit 1
        fi
        ;;
      *)
            N=/etc/init.d/$NAME
            # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
            echo "Usage: $N {start|stop|restart|force-reload|status|force-stop}" >&2
            exit 1
            ;;
    esac
    
    exit 0

    #添加执行权限

    chmod +x /etc/init.d/supervisor

    #添加service和开机自启动

    cd /etc/init.d
    update-rc.d supervisor defaults

     #创建supervisor依赖的文件夹

    mkdir -p /etc/supervisor/conf.d
    mkdir /var/log/supervisor

    #添加/etc/supervisor/supervisord.conf配置文件

    ; supervisor config file
    
    [unix_http_server]
    file=/var/run/supervisor.sock   ; (the path to the socket file)
    chmod=0700                       ; sockef file mode (default 0700)
    
    [supervisord]
    logfile=/var/log/supervisor/supervisord.log ; (main log file;default /supervisord.log)
    pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default )
    
    ; the below section must remain in the config file for RPC
    ; (supervisorctl/web interface) to work, additional interfaces may be
    ; added by defining them in separate rpcinterface: sections
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    
    [supervisorctl]
    serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket
    
    ; The [include] section can just contain the "files" setting.  This
    ; setting can list multiple files (separated by whitespace or
    ; newlines).  It can also contain wildcards.  The filenames are
    ; interpreted as relative to this file.  Included files *cannot*
    ; include files themselves.
    
    [include]
    files = /etc/supervisor/conf.d/*.conf

    #启动supervisor服务

    service supervisor start

    PS:由于线上apt-get安装的supervisor默认版本都是3.0b2这个版本,而这个版本很多业务都出现过supervisorctl重启应用卡住的情况,实际上就是执行成功了,却没有返回导致卡住,所以发版的时候就会hang在那里。google了一圈基本都尝试过也没有好的办法,而升级版本是可以解决这个问题的。。

    详见:

    https://github.com/Supervisor/supervisor/issues/131

    如果线上已经在用的supervisor的,可以直接用pip install -U supervisor -i http://pypi.douban.com/simple,然后把/etc/init.d/supervisor文件中的DAEMON=/usr/bin/supervisord替换成DAEMON=/usr/local/bin/supervisord,再重启supervisor服务就好了,不过这样的做法会影响线上supervisor纳管的所有应用不可用(大概10s),所以要先和业务沟通哦^_^

  • 相关阅读:
    zoj 2316 Matrix Multiplication 解题报告
    BestCoder7 1001 Little Pony and Permutation(hdu 4985) 解题报告
    codeforces 463C. Gargari and Bishops 解题报告
    codeforces 463B Caisa and Pylons 解题报告
    codeforces 463A Caisa and Sugar 解题报告
    CSS3新的字体尺寸单位rem
    CSS中文字体对照表
    引用外部CSS的link和import方式的分析与比较
    CSS样式表引用方式
    10个CSS简写/优化技巧
  • 原文地址:https://www.cnblogs.com/xingxiz/p/11103997.html
Copyright © 2011-2022 走看看