読者です 読者をやめる 読者になる 読者になる

Laravel で定期的にジョブを実行する

Laravel

タイトルの通りです。
まとめていきます。

Laravel5 のタスクスケジュール

Laravel4 まで、コンソールコマンドをスケジュールする場合にはCronエントリーを毎回作成して、SSH接続しサーバ側に追加する必要がありました。
これは、ジョブを追加したい側にとってもジョブを確認したい側にとっても、手間のかかる作業ですね。
しかし Laravel5 からタスクスケジュール機能が追加されて、ソースコード上でジョブの実行スケジュールを管理できるようになりました。
ジョブを確認したければ、既知の場所に管理されているソースコードを読むだけです。
ジョブを追加したければ、それを Laravel式 にコーディングするだけです。
また、ソースコードなのでバージョン管理システムで簡単に管理することもできます。
スケジューリングするジョブは app/Console/Kernel.php に記述していきます。
例えば、以下は毎分ログに'hello'と出力するコードです。

$schedule->call(function () {
    Log::info('hello');
})->everyMinute();

後は以下のCronエントリーをサーバに追加するだけでスケジューリングが始まります。

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

このエントリを追加することによって、Laravelのコマンドスケジューラが毎分呼び出され、登録されているジョブが実行されます。
デプロイを自動化している場合などはこのエントリーの追加もタスクに含めてあげればいいかと思います。

おわり

ざっくりと概要だけ書きましたが、スケジューリング用の便利なメソッドが沢山用意されています。
気になったら公式ドキュメントへどうぞ。