Edited at

EC2上のLaravelキューワーカをSupervisorで永続化


はじめに

ちゃんとLaravelのキューを触る機会があり、永続化するため公式Docにも載っているSupervisorを使用しました。

Supervisorを使用すること自体初めてだったため間違った情報もあるかもしれません。ご容赦ください。


環境

Amazon Linux 2

Laravel5.8

PHP 7.3.3

Python 2.7.14


pipのインストール

$ sudo easy_install pip


Supervisorのインストール

$ pip install supervisor

以下のコマンドでインストールの確認

$ supervisord -v


コンフィグファイル作成


デフォルトのコンフィグファイル生成

$ echo_supervisord_conf > /etc/supervisord.conf


コンフィグファイル修正

公式Docを参考にコンフィグファイルを修正します。

私が修正した内容は以下になります。


/etc/supervisor.conf

[unix_http_server]

file=/var/run/supervisor.sock

[supervisord]
logfile=/var/log/supervisord.log
logfile_maxbytes=50MB ;デフォルト
logfile_backups=10 ;デフォルト
loglevel=info ;デフォルト
pidfile=/var/run/supervisord.pid
nodaemon=false ;デフォルト
minfds=1024 ;デフォルト
minprocs=200 ;デフォルト

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

[include]
files = /etc/supervisord.d/*.ini


私と同じようにsockファイルの設定を変えた場合は新しく作成してください。

$ sudo touch /var/run/supervisor.sock

$ sudo chmod 777 /var/run/supervisor.sock


program設定

Laravelキューワーカーを起動する設定を作成します。

私はincludeで指定したディレクトリに設定ファイルを配置していますが、supervisor.conf内に直接記述することもできます。


/etc/supervisord.d/laravel-worker.ini

[program:laravel-worker]

process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=ec2-user
numprocs=8
redirect_stderr=true
stdout_logfile=/tmp/worker.log


サービス登録

systemctlを使用してsupervisorの起動、停止等の操作を行えるようにします。

supervisordコマンドとsupervisorctlコマンドを使用して同様の操作は可能なので、不要な方は飛ばしてください。

/etc/systemd/system/supervisord.serviceを作成します。


supervisord.service

[Unit]

Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target

[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=50s

[Install]
WantedBy=multi-user.target



動作確認

$ systemctl start supervisord

$ systemctl status supervisord
$ systemctl stop supervisord

問題なければ自動起動に登録します。

$ sudo systemctl enable supervisord.service


プロセス一覧確認

$ sudo supervisorctl status

laravel-worker:laravel-worker_00 RUNNING pid 17275, uptime 0:00:14
laravel-worker:laravel-worker_01 RUNNING pid 17276, uptime 0:00:14
laravel-worker:laravel-worker_02 RUNNING pid 17277, uptime 0:00:14
laravel-worker:laravel-worker_03 RUNNING pid 17278, uptime 0:00:14
laravel-worker:laravel-worker_04 RUNNING pid 17279, uptime 0:00:14
laravel-worker:laravel-worker_05 RUNNING pid 17280, uptime 0:00:14
laravel-worker:laravel-worker_06 RUNNING pid 17281, uptime 0:00:14
laravel-worker:laravel-worker_07 RUNNING pid 17282, uptime 0:00:14

以上でキューワーカーの永続化が完了しました。


参考

[Laravel5.5]queue:workをsupervisorでデーモン化