3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel queue をcron で動かす場合の設定例

Posted at

この記事は、自身の以下のブログ記事の要旨をまとめたものです。

利用環境

  • Laravel 9
  • デプロイ先はエックスサーバー(スタンダードプラン)

結論から

レンタルサーバー(エックスサーバー)上で、Laravelのqueue ワーカープロセスを稼働させる際、cron エントリに以下のような設定にしました。

*/5 * * * * cd path/to/laravel_project && /opt/php-8.1/bin/php artisan queue:work --max-time=300 --timeout=36000 --env=production >> /dev/null 2>&1

ポイントは以下です。

  • cron の実行周期を、5分に設定
  • –max-time=300 に指定して、ワーカープロセスの生存時間を5分に設定
  • 実行すべきジョブがなければワーカープロセスを停止する --stop-when-empty は、プロセス生成直後に停止してしまう可能性があるのでつけない

ダメな例

* * * * * cd path/to/laravel_project && /opt/php-8.1/bin/php artisan queue:work --max-time=36000 --timeout=36000 --env=production >> /dev/null 2>&1

以下の点がダメなポイントです。

  • –max-time と –timeout を 36000秒(10時間!)というめちゃ大きな値にしている
  • –stop-when-empty オプションをつけていないので、–max-time オプションで指定している秒数、ワーカープロセスが残り続ける
  • cron の起動は最短間隔(1分ごと)にしてあるため、新しいワーカープロセスが頻繁に生成される

つまり、古いプロセスが消えることなく、新しいプロセスを次々に作ってしまう設定だったということです。
レンタルサーバのサポートから、高負荷なので対策するようにと警告を受け(ご迷惑おかけしました)、上記の設定に変更しました。

補足など

日本語ドキュメントにもqueue コマンドについて詳しく掲載されているので、そちらをご覧ください。

そもそもの話、supervisor などプロセスを永続化させるための仕組みが利用できるなら、そちらを利用したほうがよいと思います。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?