• 安装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),所以要先和业务沟通哦^_^

  • 相关阅读:
    IE6-IE11兼容性问题列表及解决办法
    EJB--事务管理 .
    JDBC批处理---(java 对数据库的回滚) .
    redisb并发访问慢出现的问题
    redis其他问题
    多线程实现服务器端接收连接
    序列化作用
    redis的key过期时间
    nginx负载均衡和反向代理有什么区别
    nginx的负载均衡和反响代理配置
  • 原文地址:https://www.cnblogs.com/xingxiz/p/11103997.html
Copyright © 2020-2023  润新知