zoukankan      html  css  js  c++  java
  • python之supervisord启动脚本

    Supervisord 是用Python实现的一款非常实用的进程管理工具,在批量服务化管理时特别有效。可以将非Daemon的应用转为daemon程序。关于supervisord的安装和配置,在网上已经有很多现成的帖子,我这里就不重复了。

    在centos和rhel的环境下,我们一般是用chkconfig来管理服务的启动停止、开机自启动等。下面我列出Supervisord的服务脚本。

    1. 执行如下命令:

    vim /etc/init.d/supervisord

     2.输入如下内容:

    注意:该文件中的如下几个变量,都需要根据你实际的目录来改写。

    PREFIX=/usr/local

    SUPERVISORD=$PREFIX/bin/supervisord      ##supervisord   程序的安装路径

    SUPERVISORCTL=$PREFIX/bin/supervisorctl  ##supervisorctl 程序的安装路径

    PIDFILE=/var/supervisor/supervisord.pid   ##需要先创建/var/supervisor目录

    LOCKFILE=/var/supervisor/supervisord.lock

    OPTIONS="-c /etc/supervisord.conf"   ##配置文件的路径

    #!/bin/bash
    #
    # supervisord   This scripts turns supervisord on
    # 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.
    #
    
    # source function library
    . /etc/rc.d/init.d/functions
    
    set -a
    
    PREFIX=/usr/local
    
    SUPERVISORD=$PREFIX/bin/supervisord
    SUPERVISORCTL=$PREFIX/bin/supervisorctl
    
    PIDFILE=/var/supervisor/supervisord.pid
    LOCKFILE=/var/supervisor/supervisord.lock
    
    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

    保存完毕之后,可以执行以下命令修改文件权限:

    chmod 777 /etc/init.d/supervisord

    /etc/init.d/supervisord  start

     这样,supervisor就启动了。

    3. 配置开机启动

    执行以下命令:

    chkconfig supervisord  on

     可以以下命令查看是否成功

    chkconfig --list | grep  supervisord 

  • 相关阅读:
    代码高亮测试
    docker详解
    生成python项目的docker模板
    Windows下载Ubuntu的文件,用WinSCP软件(建议用MobeXterm),Ubuntu开启SSH连接
    分配堆内存的四种方式
    像素和rgb
    自由飞翔
    像素和分辨率的关系
    DOM事件阶段以及事件捕获与事件冒泡先后执行顺序
    有点甜 汪苏泷
  • 原文地址:https://www.cnblogs.com/apexchu/p/4207333.html
Copyright © 2011-2022 走看看