Closed14

【Laravel】タスクスケジュール定義して、決まった時間に処理を実行したい

じょーだんじょーだん

タスクスケジュールは、app/Console/Kernel.phpファイルのscheduleメソッドで定義する。

じょーだんじょーだん

Laravelのスケジューラを使用する場合、サーバに1分ごとにschedule:runコマンドを実行する単一のcron設定エントリを追加するだけ。

schedule:run Artisanコマンド
スケジュールしたすべてのタスクを評価し、サーバの現在の時刻に基づいてタスクを実行する必要があるかどうかを判断してくれる。

スケジューラの中に複数のタスクを定義しといて、単一のcron設定エントリを設定すればいいので、楽ですね。

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
じょーだんじょーだん

実際にタスクスケジュールを使ってみる。
1分ごとにメッセージを出力してみる。
Laravel8以降だと、cronを設定しないで、

php artisan schedule:work

を使うことでローカルでスケジューラーを呼ぶことができる。

じょーだんじょーだん

プレイヤー数をカウントするartisanコマンド。
この後、スケジューラーで実行させる。

app/Console/Commands/CountPlayer.php
省略
    public function handle()
    {
        logger("{$count}プレイヤーいました!");
    }
じょーだんじょーだん

実行してみる。

Kernel.php
    protected function schedule(Schedule $schedule)
    {
        //コールバックを1分毎に実行
        $schedule->call(function () {
            logger("1分ごとに実行されるバッチ処理");
        })->everyMinute();
        //定義したカスタムartisanコマンドを2分毎に実行
        $schedule->command(CountPlayer::class)->everyTwoMinutes();
    }
このスクラップは2023/10/09にクローズされました