Laravel - プログラム - 定期的に実行


 クラウディア


1. 概要
2. スケジュールへ組込
3. cron へ組込
4. 参考サイト

1. 概要

 作成したプログラムをスケジュールに組み込んで、定期的に実行させます。

2. スケジュールへ組込

 プロジェクトディレクトリで、プロジェクトの管理ユーザで。

vi bootstrap/app.php

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Console\Scheduling\Schedule;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {

		・・・	略	・・・

    })
 と下記の間に。

    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();
 下記を記述します。

	->withSchedule(function (Schedule $schedule) {
		$schedule->command('app:program_name')->everyMinute();
	})
 上記の「everyMinute()」は、毎分の動作になります。  この後ろに「->withoutOverlapping()」をつけると、前回の処理が終了していないと次の実行がスキップされるようになるようです。  他に、主なメソッドとして、下記のものがあるようです(他にも多数存在します)。
メソッド 意味 備考
cron('* * * * *') カスタム cron スケジュールでタスクを実行
everySecond() 毎秒実行
everyTwoSeconds() 2秒ごとに実行
everyMinute() 毎分実行
everyTwoMinutes() 2分ごとに実行
hourly() 毎時実行
hourlyAt(n) 1時間ごと毎時 n 分に実行
everyOddHour($minutes = 0) 奇数時間ごとに実行
everyTwoHours($minutes = 0) 2時間ごとに実行
daily() 毎日 00:00 に実行
dailyAt('HH:MM') 毎日 HH:MM に実行

 「everyTwoSeconds()」「everyTwoMinutes()」「every*Minutes()」は、「every*Seconds()」「every*Minutes()」の「*」の箇所を「Three」「Four」「Five」「Ten」「Fifteen」「Thirty」と変えることで、3、4、5、10、15、30分あるいは分と制御できるようです。
 「everyTwoHours()」は、「every*Hours()」の「*」の箇所を「Three」「Four」「Six」とかえることで、3、4、6時間と制御できるようです。
 (そんな派生のさせ方、させんでも・・・)

3. cron へ組込

 上記でスケジュールに組み込んだものを実行するには、「cron」へ組み込みます。

sudo -u www crontab -e
 「Linux」の場合、「-u www」の箇所は、「-u apache」になります(以下同文)。  毎分の実行にするのであれば、下記のように記述します。

* * * * * cd /project_path && php artisan schedule:run >> /dev/null 2>&1
 記述した内容は。

sudo -u www crontab -l
 で、確認できます。  あとは、プログラムの中に、「logger()」を仕込んでおけば、定期的に実行しているかは、確認できます。

4. 参考サイト

 本ページは、「ChatGPT」くん、および下記のサイトを参考にさせていただきました。
12.x タスクスケジュール Laravel

AbemaTV 無料体験