タスクスケジューラ

Laravel5 から cronの代わりにコマンド実行の計画をソースコードで指定できるようになりました。


スケジューリング

app/Console/Commands/Kernel.php にコマンド実行計画を記述します。

<?php namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel {
	// ...

	protected function schedule(Schedule $schedule)
	{
		$schedule
			->command('auth:clear-reminders') // artisan command を実行
			->daily();  // 毎日

		$schedule
			->call('YourClass@someMethod') // クラスメソッドを実行
			->hourly();  // 毎時

		$schedule
			->call(function() {  // クロージャーを実行
				// Do some task...
			})
			->dailyAt('15:00');  // 毎日時間指定

		$schedule
			->exec('cp oldThing newThing')	// ターミナルコマンドを実行
			->weekly()->mondays()->at('13:00'); // 毎週、曜日、時間指定
	}
}

実行出来る物や、時間の指定方法は色々あります。
詳細は公式サイトをご覧ください。
http://laravel.com/docs/5.1/scheduling


cron 登録

cron に、一つだけエントリーが必要です。

* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1

毎分、cronが Laravelのスケジューラを起動します。スケジューラーは、app/Console/Commands/Kernel.php に記述されているスケジュールに基づいて、コマンドを実行します。


まとめ

Laravelでコマンド実行のスケジューリングを出来るようになりました。cronの記述方法に比べて、ソースの記述は、とても分かりやすいです。また、ソースに記述することで、git 等のバージョン管理システムで管理できるのも助かります。

コメントを残す