【Laravel5.5】EC2にSupervisorを入れてQueueのリスナーを監視する
こんにちは。
ニシザワです。
本日はSupervisorを使って
EC2にLaravelのQueueリスナーを監視する方法を書きたいと思います。
下記のような表示になれば完成です。
一度killしてみて、復活していたら完了です!!
結構簡単に作れますのでよければ試してみてください。
ニシザワです。
本日はSupervisorを使って
EC2にLaravelのQueueリスナーを監視する方法を書きたいと思います。
環境
[ec2-user@ip-xxx-xx-xx-xx xxx]# python --version
Python 2.7.14
[ec2-user@ip-xxx-xx-xx-xx xxx]$ cat /etc/system-release
Amazon Linux AMI release 2018.03
[ec2-user@ip-xxx-xx-xx-xx xxx]$ arch
x86_64
Supervisorをインストール
easy_install supervisor
設定ファイルの作成
echo_supervisord_conf > /etc/supervisord.conf
設定を変更
logfile=/var/log/supervisord/supervisord.log
[include]
files = /etc/supervisord.d/*.conf
includeの;を外すのがポイント!
ディレクトリ作成
mkdir /var/log/supervisord
mkdir /etc/supervisord.d
実行ファイルを作成
#!/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
# Greg Smethells <gsmethells@mgmail.com>
#. Allow supervisorctl to be overridden
#
# 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=${SUPERVISORCTL-/usr/bin/supervisorctl}
#supervisord=${SUPERVISORD-/usr/bin/supervisord}
supervisorctl=${SUPERVISORCTL-/usr/local/bin/supervisorctl}
#supervisorctl=/usr/local/bin/supervisorctl
supervisord=${SUPERVISORD-/usr/local/bin/supervisord}
prog=supervisord
#pidfile=${PIDFILE-/var/run/supervisord.pid}
pidfile=${PIDFILE-/tmp/supervisord.pid}
lockfile=${LOCKFILE-/var/lock/subsys/supervisord}
#sockfile=${SOCKFILE-/var/run/supervisord.sock}
sockfile=${SOCKFILE-/tmp/supervisord.sock}
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} ${sockfile}
}
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
こちらで、実行コマンドを作っています。
起動法
service supervisord start //起動
service supervisord stop //停止
service supervisord restart //再起動
初期起動の設定
chkconfig supervisord on
サーバーリスタートしたときに用に。
Laravelのsupervisorの設定
vim /etc/supervisord.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/hoge/artisan queue:work //実行コマンド
autostart=true //自動的に起動するかどうか
autorestart=true //プロセスが死んだときに自動的に起動するかどうか
user=root //実行ユーザー
numprocs=2 //プロセス数
redirect_stderr=true //エラー出力設定
stdout_logfile=/var/log/supervisord/laravel-worker.log //ログ・ファイル
ここまですればsupervisorを起動してみましょう。下記のような表示になれば完成です。
Starting supervisord:
laravel-worker:laravel-worker_00 RUNNING pid 3752, uptime 4:42:17
laravel-worker:laravel-worker_01 RUNNING pid 3753, uptime 4:42:17
プロセスがあるか確認してみましょう
ps aux | grep queue:work
root 7352 0.0 4.6 470340 46580 ? S 22:22 0:00 php /var/www/hoge/artisan queue:work
root 7353 0.0 4.6 470340 46536 ? S 22:22 0:00 php /var/www/hoge/artisan queue:work
上記のようにqueueのリスナーがプロセス数だけ起動していたらOKです。一度killしてみて、復活していたら完了です!!
結構簡単に作れますのでよければ試してみてください。