在AWS AMI Linux服务器上设置Supervisord

zer*_*nes 21 amazon-web-services supervisord amazon-linux amazon-ami

我正在努力让主管努力确保我的队列系统始终在运行.

以下是我采取的步骤,我从各种来源拼凑而成:(以root身份或超级用户身份)

1)$ easy_install主管

2)$ echo_supervisord_conf> /etc/supervisord.conf

3)$ sudo vi supervisord.conf

4)将以下内容粘贴到文件末尾:

command =/usr/bin/php/path/to/AppName/artisan --env = production --timeout = 240 queue:listen

5)$ supervisord -c /etc/supervisord.conf

6)$ supervisorctl

7)主管>状态

主管>

它没有显示任何内容.

zer*_*nes 39

这是我选择的解决方案.AWS AMI包括用于安装Python应用程序的pip.以下是设置命令:

$ sudo pip install supervisor
$ echo_supervisord_conf
$ sudo su -
$ echo_supervisord_conf > /etc/supervisord.conf
Run Code Online (Sandbox Code Playgroud)

安装Supervisor后,您需要手动构建启动脚本以打开和关闭服务.

这将因您的Linux发行版而异,Ubuntu会在您安装时为您创建一个init脚本,其他发行版(如AMI)则不会.这是各种Linux发行版初始化脚本的绝佳资源:

https://github.com/Supervisor/initscripts

然后,您可以将管理程序添加到chkconfig以在系统重新引导时自动启动.

这是一个适合我的方法:

路径

/etc/init.d/supervisord
Run Code Online (Sandbox Code Playgroud)

AWS-AMI或RedHat Linux的示例Init脚本

#!/bin/bash
#
# supervisord   Startup script for the Supervisor process control system
#
# 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
#               Erwan Queffelec <erwan.queffelec@gmail.com>
#                   make script LSB-compliant
#
# chkconfig:    345 83 04
# description: Supervisor is a client/server system that allows \
#   its users to monitor and control a number of processes on \
#   UNIX-like operating systems.
# processname: supervisord
# config: /etc/supervisord.conf
# config: /etc/sysconfig/supervisord
# pidfile: /var/run/supervisord.pid
#
### BEGIN INIT INFO
# Provides: supervisord
# Required-Start: $all
# Required-Stop: $all
# Short-Description: start and stop Supervisor process control system
# Description: Supervisor is a client/server system that allows
#   its users to monitor and control a number of processes on
#   UNIX-like operating systems.
### END INIT INFO

# 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=/usr/local/bin/supervisorctl
supervisord=${SUPERVISORD-/usr/local/bin/supervisord}
prog=supervisord
pidfile=${PIDFILE-/tmp/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
Run Code Online (Sandbox Code Playgroud)

关闭并保存后,让所有用户都可执行:

chmod a+x /etc/init.d/supervisord
Run Code Online (Sandbox Code Playgroud)

接下来,您需要通过运行以下命令来确认supervisord进程实际上正在运行:

 ps -fe | grep supervisor
Run Code Online (Sandbox Code Playgroud)

如果您没有将/ usr/bin/supervisord视为正在运行的进程,则需要手动启动它:

sudo service supervisord start
Run Code Online (Sandbox Code Playgroud)

需要在重新启动服务器的任何时候启动Supervisord.这可以类似于使用chkconfig重启后如何打开apache.

首先将它添加到chkconfig,即启动进程列表

sudo chkconfig --add supervisord
Run Code Online (Sandbox Code Playgroud)

然后告诉chkconfig在启动后将其打开

sudo chkconfig supervisord on
Run Code Online (Sandbox Code Playgroud)


ted*_*r42 6

主管不知道您已添加程序。这是在 serverfault 上回答的,请执行以下操作:

supervisorctl reread
supervisorctl update
Run Code Online (Sandbox Code Playgroud)

顺便说一句,使用conf.d语法更容易维护配置文件。换句话说,创建一个名为/etc/supervisor/conf.d/artisan.conf. 其他一切都一样,但更容易对配置文件进行版本控制并将它们同步到设置的机器上。