Laravelでは定期処理をcronではなくKarnelに記述します。
(cronから実行されるようにはするのですが)
Karnelにクロージャで書くということもできるのですが、定期処理が失敗したときの再実行などが簡単にできないためおすすめしません。(失敗しても問題ない処理ならいいですがあまりないので。)
なので今回は実行コマンドを作成し、定期処理でコマンドを叩いて実行する形で実装します。
コマンド作成
exampleコマンドとそのクラスExampleDataCreatorを作成するとします。
$ php artisan make:command ExampleDataCreator --command="example"
app/Console/Commands/ExampleDataCreator.php が作成されているはずです。
handle()内に実行したい処理を書きましょう。
するともう
$ php artisan example
と実行すると処理される状態になっているはずです。
もし引数を渡したければ
protected $signature = 'example {hoge}'; ... public function handle() { $this->argument('hoge'); // これで取得できる }
とすると、$ php artisan example abcd
と実行したときに $this->argument('hoge') が'abcd'を返すようになります。hogeは適宜変えてください。
cron(定期処理)登録
Laravelでは app/Console/Kernel.php にて定期実行処理を登録します。
とはいっても、まずはこれをcronから呼び出す必要があります。
cronに下記の登録をしましょう。一度登録すればあとはここを触ることはありません。
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
上記の登録ができたらKernel.phpを変更しましょう。
protected function schedule(Schedule $schedule) { $schedule->command('example')->daily(); }
daily()で毎日深夜12時に実行されます。dailyAt('13:00')とすると毎日13時に実行することも可能です。
リストは公式か翻訳にまとまっているのでこちらを参照してください。
以上の設定ができれば定期実行されているはずです。
それではよいLaravelライフを!