はじめに
ちゃんと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を参考にコンフィグファイルを修正します。
私が修正した内容は以下になります。
[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内に直接記述することもできます。
[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を作成します。
[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
以上でキューワーカーの永続化が完了しました。