【Laravel】スケジューラでバッチ処理を定期実行する

こんにちは。今回はLaravelのスケジューラを使用して、定期的にバッチ処理を実行する方法を解説します。

環境

  • Laravel 8.x
  • Linux

概要

まずはLaravelのスケジューラがどのように定期実行を実現するかを簡単に解説します。

定期実行させるにはバッチの起動スケジュールをどこかに登録しなければなりません。LaravelではApp\Console\Kernelクラスのscheduleメソッドに登録します。ここではバッチプログラムを呼び出す間隔や頻度を設定します。

設定ができたら、スケジューラ自体を短い間隔で定期実行させる設定を行います。CronやWindows Task Schedulerで1分間隔で実行するようにします。

scheduleメソッド内で呼び出し条件に合致した場合にバッチ処理を実行します。

設定手順

毎日朝9時にメールを送信するartisanコマンドを実行する設定をしていきます。

バッチ処理の呼び出しスケジュールの作成

App\Console\Kernelクラスのscheduleメソッドに呼び出し処理を記述します。

    protected function schedule(Schedule $schedule)
    {
        $schedule->command('send:mail')->dailyAt('09:00');
    }

schedule->commandメソッドにartisanコマンド呼び出しを文字列で指定することで、コマンドを実行します。次にメソッドチェーンで呼び出し頻度を設定します。今回は毎日朝9時なのでdailyAt(’09:00′)としています。

これで毎朝9時にsend:mailコマンドを実行するスケジュールが作成できました。

Laravelスケジューラ自体の定期実行設定

App\Console\Kernelのscheduleメソッド自体をcronで毎分定期実行するように設定します。scheduleメソッドの実行はschedule:runコマンドで実行できます。crontab -eコマンドでcronに以下の文字列を設定します。path-to-your-project部分を自身のLaravelアプリケーションの絶対パスに置き換えてください。

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

以上で定期実行の設定は完了です。

まとめ

今回はLaravelのスケジューラを使用してバッチ処理を定期実行する方法を解説しました。概念がわからないうちは戸惑うかもしれませんが、一度覚えてしまえば簡単に設定出来ますね。便利に使っていきましょう。

Laravel

Posted by kobainmac