SupervisorでLaravelのQueue worker管理

お疲れ様です。ギークフィードエンジニアのサミーラです。私は2.5年間ぐらいLaravelフレームワークでWEBシステム開発をしています。
Laravelによるプロジェクトの経験

  • 通話録音システムの制御および表示Webシステム
  • モバイルゲームのバックエンドシステム
  • WEB電話帳システム
  • IP-PBXのWEBプロビジョニングシステム。

Introduction

LaravelのQueueを使用して、PHPのバックグラウンド処理ができる方法について、Laravelでバックグラウンド処理のブログで話した時にworkerプロセスについても話しました。

workerプロセスはartisanコマンドで実行できますけど、いろいろな原因でworkerが停止になる可能性があります。そうなると新しくQueueに入るJOBが処理されなくなります。(JOB実行のためにWorkerがないので。。)

上の現象が問題ですよね。。でも、解決できる方法がありますよ。。そのためにSupervisorというプロセス管理システムを使用することができます。

この記事でSupervisorを使用してworkerプロセスを管理する方法について話します。

これらはlaravelの基本的な知識で行うことができます。あと、この記事に関するテストをした環境は

  • Centos 7.6
  • PHP 8
  • Laravel 8.0
  • MySQL 15.1 Distrib 10.3.12-MariaDB

LinuxにSupervisorをインストールする方法

以下のステップでSupervisorをCentosにインストールすることができます。

  1. sudo yum update -y
  2. sudo yum install epel-release
  3. sudo yum update
  4. sudo yum -y install supervisor
  5. sudo systemctl start supervisord
  6. sudo systemctl enable supervisord
  7. sudo systemctl status supervisord

Supervisorの設定

SupervisorをインストールするとCentosで「/etc/supervisord.conf」ファイルが作成されます。以下の行をsupervisord.confに入れたら、プロセス管理設定ができます。

  • program ➔ プロセスを指定する任意の名前
  • command ➔ 実行したいコマンド
  • autostart ➔ trueの場合はSupervisorを再起動する時に対象のプロセスも自動的に再起動される
  • autorestart ➔ trueの場合はプロセスが停止されると自動的に再起動される
  • user ➔ プロセスを実行するユーザー
  • numprocs ➔ 非同期で実行したいプロセス数
  • startsecs ➔ プロセス開始からRUNNINGまでの秒数
  • redirect_stderr ➔ trueの場合はプロセスのstderrがstdoutへリダイレクトされる
  • stdout_logfile ➔ stdoutを出力したいファイルのフルパス
  • stopwaitsecs ➔ プロセスを強制終了するまでの秒数

★上のコマンド(command)だとLaravelプロジェクトでworker_queueを対象にしてworkerプロセス8個が実行されて監視されます。

★Exceptionでプロセスが失敗されると「–tries=5」なので5回リトライされる。リトライされる時に毎回10秒「–delay=10」後にリトライされる。

「startsecs=0」に設定しないと、例えば:startsecs=1(デフォルト)の場合は1秒前にExceptionが発生したらworkerプロセスがfailedステータスになってexitになる可能性があります。それで、Supervisorの「startretries=3(デフォルト)」設定でworkerが3回再起動されて、その後にworker再起動を諦めます。

★stopwaitsecsが一番長い時間処理されるJOBの時間以上の値に設定しないとJOBが処理中でKILLされる可能性があります。

参照

Supervisorのまとめ

LaravelのQueue機能でJOBを処理する時に継続的に処理されるため、JOB実行するworkerプロセスの監視システムが必要です。そのためにlinuxのSupervisorを使用する必要があります。

ALL THE BEST!!! HAPPY & CLEAN CODING!!!

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
アバター
sameera
システムエンジニアギークフィード
Computer Science Special Degree (Honours) graduate who worked as a past Lecturer and currently full stack developer in GeekFeed.

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ