web-dev-qa-db-ja.com

AWS AMI LinuxサーバーでのSupervisordのセットアップ

キューシステムが常に実行されていることを確認するためにスーパーバイザーを動作させようとしています。

さまざまなソースからつなぎ合わせた手順を以下に示します:(ルートまたはスーパーユーザーとして実行)

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)スーパーバイザー>ステータス

監督者>

何も表示しません。

20
zeros-and-ones

ここに私が行った解決策があります。 AWS AMIには、Pythonアプリケーションをインストールするためのpipが含まれています。セットアップコマンドは次のとおりです。

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

スーパーバイザをインストールしたら、起動スクリプトを手動で構築して、サービスをオンまたはオフにする必要があります。

これはLinuxディストリビューションによって異なります。Ubuntuはインストール時にinitスクリプトを作成しますが、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

次に、次のコマンドを実行して、監視対象プロセスが実際に実行されていることを確認します。

 ps -fe | grep supervisor

/ usr/bin/supervisordが実行中のプロセスとして表示されない場合は、手動で起動する必要があります。

Sudo service supervisord start

スーパーバイザーは、サーバーを再起動するたびに起動する必要があります。これは、chkconfigを使用して再起動後にApacheをオンにする方法と同様に実行できます。

まず、起動プロセスリストであるchkconfigに追加します

Sudo chkconfig --add supervisord

次に、起動後にchkconfigを有効にするように指示します

Sudo chkconfig supervisord on
37
zeros-and-ones

スーパーバイザーは、あなたがプログラムを追加したことを知りません。 これはserverfaultで回答されます 、以下を実行します:

supervisorctl reread
supervisorctl update

ところで、conf.d構文を使用して構成ファイルを管理する方が簡単です。つまり、/etc/supervisor/conf.d/artisan.confというファイルを作成します。その他はすべて同じですが、設定ファイルをバージョン管理し、セットアップ時にマシンに同期する方が簡単です。

4
tedder42