BETA

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

投稿日:2019-10-31
最終更新:2019-10-31
※この記事は外部サイト(https://qiita.com/Hiro2525/items/7b47311e0...)からのクロス投稿です

はじめに

ちゃんと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  

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

参考

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

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@H1R02525の技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!