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') // ターミナルコマンドを実行
->weeklyOn(1, '9:00'); // 毎週時間指定
}
}
実行出来る物や、時間の指定方法は色々あります。
詳細は公式サイトをご覧ください。
- http://laravel.com/docs/5.0/artisan#scheduling-artisan-commands
- http://readouble.com/laravel/5/0/0/ja/artisan.html#scheduling-artisan-commands
cron 登録
cron に、一つだけエントリーが必要です。
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1
毎分、cronが Laravelのスケジューラを起動します。スケジューラーは、app/Console/Commands/Kernel.php に記述されているスケジュールに基づいて、コマンドを実行します。
まとめ
Laravelでコマンド実行のスケジューリングを出来るようになりました。cronの記述方法に比べて、ソースの記述は、とても分かりやすいです。また、ソースに記述することで、git 等のバージョン管理システムで管理できるのも助かります。