- 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」
|