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 等のバージョン管理システムで管理できるのも助かります。