Laravelでキューに投入されたジョブを処理するには、以下のコマンドの実行が必要です。
php artisan queue:work
AWSのLightsailは開発環境で利用することが多いかと思いますが、たとえ開発環境でも、実行するたびにコマンドを実行するのは手間なです。
今回は、プロセスを管理するツールであるSupervisorを利用して、Laravelのキューを常時実行できるようにすう手法について記載しておこうと思います。
インストール
Supervisorをインストール
sudo apt update sudo apt install supervisor
Supervisor設定ファイルを作成
設定ファイルが無いので作成。
Supervisorは、/etc/supervisor/conf.dフォルダ内のconfファイルを探すので、こちらに設定ファイルを作成。
sudo nano /etc/supervisor/conf.d/laravel-worker.conf
設定内容(プロジェクト名、部分を書き替えてください)
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=/opt/bitnami/php/bin/php /opt/bitnami/apache2/htdocs/(プロジェクト名)/artisan queue:work --tries=3
autostart=true
autorestart=true
user=bitnami
numprocs=1
redirect_stderr=true
stdout_logfile=/opt/bitnami/apache2/htdocs/(プロジェクト名)/storage/logs/worker.log
nanoエディタの使い方:設定内容を記載後、保存 (Ctrl + O → Enter) し、終了 (Ctrl + X)します
設定ファイルが正しく作成されているか確認
ls -l /etc/supervisor/conf.d/
こんな感じに出るはず
-rw-r--r-- 1 root root xxx date time laravel-worker.conf
Supervisorを再読み込みして起動
sudo supervisorctl reread sudo supervisorctl update
正しく動作していれば、laravel-worker: availableと表示されるはず。
LaravelのWorkerを起動
sudo supervisorctl start laravel-worker:*
サービスのステータス確認
sudo supervisorctl status
こんな感じに出ればOK
laravel-worker:laravel-worker_00 RUNNING pid 12345, uptime 0:00:10
上記のようにRUNNINGと表示されるはず。
上手く起動しない場合
Supervisor を再起動
sudo systemctl restart supervisor
この後、上記にも記載したSupervisorを再読み込みして起動します。
(補足)エラー時の対処
Supervisor のログ
sudo cat /var/log/supervisor/supervisord.log
Laravel Worker のログ
sudo tail -f /opt/bitnami/apache2/htdocs/(プロジェクト名)/storage/logs/worker.log
テスト
再起動して正常に動作するか
Supervisorは自動でプロセスを再起動しますが、念のため再起動後の動作をテスト
sudo reboot
再起動後、以下でWorkerが動作中か確認
sudo supervisorctl status
実際にキューに投入されたジョブが動作するかどうか確認
あとは実際にジョブを作成してみて、実行されることを確認してください。
株式会社OZでは、他の方達にも有益と思われる情報は、社内ナレッジに留めず、積極的に情報公開するという方針をとっております。
株式会社OZをよろしくお願いします!