Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

ちゃんと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でデーモン化

Hiro2525
joolen
ECサイト構築から商材の提供、販売支援まで、ワンストップでサービスをご提供致します。 これからECを始めたいとお考えの方、すでに運営されている方、ECのことなら弊社にお任せください。 お客様のニーズにマッチしたサービスをご提供致します。
https://www.joolen.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away