Настройка Supervisord на сервере AWS AMI Linux

Я пытаюсь заставить супервизора работать, чтобы убедиться, что моя система очередей всегда работает.

Вот шаги, которые я предпринял, которые я собрал из разных источников: (Работал как 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 очередь:прослушать

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

6) $ супервизор

7) руководитель > статус

руководитель>

Он ничего не отображает.


person zeros-and-ones    schedule 24.02.2015    source источник
comment
Это сложно, Ubuntu проще.   -  person Yevgeniy Afanasyev    schedule 29.11.2018


Ответы (2)


Вот решение, с которым я пошел. AWS AMI включает pip для установки приложений Python. Вот команды настройки:

$ sudo pip install supervisor
$ echo_supervisord_conf
$ sudo su -
$ echo_supervisord_conf > /etc/supervisord.conf

После установки супервизора вам нужно будет вручную создать сценарий запуска, чтобы включать и выключать службу.

Это будет зависеть от вашего дистрибутива Linux, Ubuntu создаст для вас сценарий инициализации при установке, другие дистрибутивы, такие как AMI, этого не сделают. Вот отличный ресурс для различных сценариев инициализации дистрибутива Linux:

https://github.com/Supervisor/initscripts

Затем вы можете добавить супервизор в chkconfig, чтобы автоматически запускаться при перезагрузке системы.

Вот один из них, который работает для меня:

Дорожка

/etc/init.d/supervisord

Пример сценария инициализации для AWS-AMI или RedHat Linux

#!/bin/bash
#
# supervisord   Startup script for the Supervisor process control system
#
# Author:       Mike McGrath <[email protected]> (based off yumupdatesd)
#               Jason Koppe <[email protected]> adjusted to read sysconfig,
#                   use supervisord tools to start/stop, conditionally wait
#                   for child processes to shutdown, and startup later
#               Erwan Queffelec <[email protected]>
#                   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

После закрытия и сохранения сделайте его исполняемым для всех пользователей:

chmod a+x /etc/init.d/supervisord

Затем вы захотите подтвердить, что процесс supervisord действительно запущен, выполнив следующую команду:

 ps -fe | grep supervisor

Если вы не видите /usr/bin/supervisord как запущенный процесс, вам нужно запустить его вручную:

sudo service supervisord start

Supervisord необходимо запускать каждый раз после перезагрузки сервера. Это можно сделать аналогично тому, как apache включается после перезагрузки с помощью chkconfig.

Сначала добавьте его в chkconfig, ваш список запускаемых процессов.

sudo chkconfig --add supervisord

Затем скажите chkconfig включить его после загрузки.

sudo chkconfig supervisord on
person zeros-and-ones    schedule 23.07.2015
comment
Я создал файл /etc/init.d/supervisord, а затем запустил sudo service supervisord start, но получил env: /etc/init.d/supervisord: Отказано в доступе... есть идеи? Я использую ec2 Amazon AIM с Centos 7. - person llioor; 04.12.2016
comment
chmod a+x /etc/init.d/supervisord сделать его исполняемым было недостающим шагом в этом очень подробном ответе :) - person Filipe Pina; 05.12.2016
comment
Спасибо, Филипе, я обновлю ответ. - person zeros-and-ones; 05.12.2016
comment
@llioили попробуйте chowning /tmp/supervisor.sock - person zeros-and-ones; 24.02.2017

руководитель не знает, что вы добавили программу. На этот вопрос отвечает serverfault, выполните следующие действия:

supervisorctl reread
supervisorctl update

Кстати, проще поддерживать файлы конфигурации, используя синтаксис conf.d. Другими словами, создайте файл с именем /etc/supervisor/conf.d/artisan.conf. Все остальное то же самое, но проще управлять версиями файлов конфигурации и синхронизировать их с машинами при установке.

person tedder42    schedule 24.02.2015
comment
Эй, спасибо за ваш быстрый ответ! Я не могу дождаться, чтобы выйти и проверить это! - person zeros-and-ones; 25.02.2015
comment
Я пробовал это, и у меня были некоторые ошибки. Я заметил, что не могу запустить супервизора, при запуске от имени su $service supervisord start я получаю супервизор: нераспознанная служба. Нужен ли мне такой сценарий запуска? http://translate.google.com/translate?hl=en&sl=ja&u=http://d.hatena.ne.jp/massat/20111013/1318484253&prev=search - person zeros-and-ones; 25.02.2015
comment
как вы установили супервайзер? Я предполагаю, что вы используете AMI AWS Linux? (отредактируйте свой исходный вопрос, добавьте этот материал, затем добавьте комментарий здесь. Я попытаюсь воспроизвести.) - person tedder42; 25.02.2015