在AWS Environment中运行supervisord

时间:2017-12-21 07:15:18

标签: django amazon-web-services elastic-beanstalk supervisord

我正在努力在弹性beanstalk环境中添加supervisord,但在配置/.ebextensions时遇到了问题。具体来说,在channels.config中,我有一个文件container_commands: 01_copy_supervisord_conf: command: "cp .ebextensions/supervisord/supervisord.conf /opt/python/etc/supervisord.conf" 02_reload_supervisord: command: "supervisorctl -c /opt/python/etc/supervisord.conf reload" ,其代码如下:

Command failed on instance. Return code: 1 Output: error: <class 
    'FileNotFoundError'>, [Errno 2] No such file or directory:
    file: /opt/python/run/venv/local/lib/python3.4/site-
    packages/supervisor/xmlrpc.py line: 562.
    container_command 02_reload_supervisord in 
    .ebextensions/channels.config failed.

第二个命令出现以下错误消息,通过弹性beanstalk CLI:

supervisor

我的猜测是supervisor没有正确安装,但是因为命令1没有错误地复制文件,这导致我认为supervisor确实安装了,我的容器有问题命令。是否有人在AWS环境中实施{{1}}并且可以看到我出错的地方?

1 个答案:

答案 0 :(得分:1)

你应该注意python版本和确切的安装路径,

这是怎么可能它可以帮助

packages:
  yum:
    python27-setuptools: []
container_commands:
  01-supervise:
    command: ".ebextensions/supervise.sh"

这是supervise.sh

#!/bin/bash
if [ "${SUPERVISE}" == "enable" ]; then

export HOME="/root"
export PATH="/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin"

easy_install supervisor

cat <<'EOB' > /etc/init.d/supervisord

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

    # Source system settings
    if [ -f /etc/sysconfig/supervisord ]; then
        . /etc/sysconfig/supervisord
    fi

    # Path to the supervisorctl script, server binary,
    # and short-form for messages.
    supervisorctl=${SUPERVISORCTL-/usr/bin/supervisorctl}
    supervisord=${SUPERVISORD-/usr/bin/supervisord}
    prog=supervisord
    pidfile=${PIDFILE-/var/run/supervisord.pid}
    lockfile=${LOCKFILE-/var/lock/subsys/supervisord}
    STOP_TIMEOUT=${STOP_TIMEOUT-60}
    OPTIONS="${OPTIONS--c /etc/supervisord.conf}"
    RETVAL=0

    start() {
        echo -n $"Starting $prog: "
        daemon --pidfile=${pidfile} $supervisord $OPTIONS
        RETVAL=$?
        echo
        if [ $RETVAL -eq 0 ]; then
            touch ${lockfile}
            $supervisorctl $OPTIONS status
        fi
        return $RETVAL
    }

    stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile} -d ${STOP_TIMEOUT} $supervisord
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -rf ${lockfile} ${pidfile}
    }

    reload() {
        echo -n $"Reloading $prog: "
        LSB=1 killproc -p $pidfile $supervisord -HUP
        RETVAL=$?
        echo
        if [ $RETVAL -eq 7 ]; then
            failure $"$prog reload"
        else
            $supervisorctl $OPTIONS status
        fi
    }

    restart() {
        stop
        start
    }

    case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        status)
            status -p ${pidfile} $supervisord
            RETVAL=$?
            [ $RETVAL -eq 0 ] && $supervisorctl $OPTIONS status
            ;;
        restart)
            restart
            ;;
        condrestart|try-restart)
            if status -p ${pidfile} $supervisord >&/dev/null; then
              stop
              start
            fi
            ;;
        force-reload|reload)
            reload
            ;;
        *)
            echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload}"
            RETVAL=2
    esac

    exit $RETVAL
    EOB

      chmod +x /etc/init.d/supervisord

      cat <<'EOB' > /etc/sysconfig/supervisord
    # Configuration file for the supervisord service
    #
    # Author: Jason Koppe <jkoppe@indeed.com>
    #             orginal work
    #         Erwan Queffelec <erwan.queffelec@gmail.com>
    #             adjusted to new LSB-compliant init script

    # make sure elasticbeanstalk PARAMS are being passed through to supervisord
    . /opt/elasticbeanstalk/support/envvars

    # WARNING: change these wisely! for instance, adding -d, --nodaemon
    # here will lead to a very undesirable (blocking) behavior
    #OPTIONS="-c /etc/supervisord.conf"
    PIDFILE=/var/run/supervisord/supervisord.pid
    #LOCKFILE=/var/lock/subsys/supervisord.pid

    # Path to the supervisord binary
    SUPERVISORD=/usr/local/bin/supervisord

    # Path to the supervisorctl binary
    SUPERVISORCTL=/usr/local/bin/supervisorctl

    # How long should we wait before forcefully killing the supervisord process ?
    #STOP_TIMEOUT=60

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

      mkdir -p /var/run/supervisord/
      chown webapp: /var/run/supervisord/

      cat <<'EOB' > /etc/supervisord.conf
    [unix_http_server]
    file=/tmp/supervisor.sock
    chmod=0777

    [supervisord]
    logfile=/var/app/support/logs/supervisord.log
    logfile_maxbytes=0
    logfile_backups=0
    loglevel=warn
    pidfile=/var/run/supervisord/supervisord.pid
    nodaemon=false
    nocleanup=true
    user=webapp

    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

    [supervisorctl]
    serverurl=unix:///tmp/supervisor.sock

    [program:process-ipn-api-gpsfsoft]
    command = -- command that u want to run ---
    directory = /var/app/current/
    user = webapp
    autorestart = true
    startsecs = 0
    numprocs = 10
    process_name = -- process name that u want ---

    EOB

      # this is now a little tricky, not officially documented, so might break but it is the cleanest solution
      # first before the "flip" is done (e.g. switch between ondeck vs current) lets stop supervisord
      echo -e '#!/usr/bin/env bash\nservice supervisord stop' > /opt/elasticbeanstalk/hooks/appdeploy/enact/00_stop_supervisord.sh
      chmod +x /opt/elasticbeanstalk/hooks/appdeploy/enact/00_stop_supervisord.sh
      # then right after the webserver is reloaded, we can start supervisord again
      echo -e '#!/usr/bin/env bash\nservice supervisord start' > /opt/elasticbeanstalk/hooks/appdeploy/enact/99_z_start_supervisord.sh
      chmod +x /opt/elasticbeanstalk/hooks/appdeploy/enact/99_z_start_supervisord.sh
  fi

PS:您已在Elasticbeanstalk环境值中将SUPERVISE定义为启用以运行此操作。