LoginSignup
17
19

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-08-09

はじめに

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

17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19