コマンドを作成する

Last-modified: Tue, 11 Sep 2018 00:36:07 JST (99d)

Laravel5.6でCronなどから実行するコマンドを簡単に作成することができます。

コマンドの作成

まずはひな形を作成します。

php artisan make:command cron/GetRss

これで、app\Console\Commands\cron配下にひな形が作成されます。

  • $signatureにコマンド名を指定します。
  • $descriptionにコマンドの説明を記載します。
  • handle()メソッドが実際に動作するメソッドになります。
    コマンドの中身はここに実装していくことになります。

コマンドの登録

作成したコマンドはそのままでは動作しませんので、登録を行います。
App\Console\kernel.phpの中にある$commands配列に以下のように登録します。

    protected $commands = [
        Commands\cron\GetRss::class
    ];

ここに登録すると、

 php artisan getrss

のように実行することができます。

タスクスケジューラ

Laravelでは、複数のコマンドを定期実行する際に、各コマンドをそれぞれCronに登録しなくても済むように、タスクスケジューラ機能があります。参考

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

のような毎分実行するCronを設定するだけで、あとはLaravelのタスクスケジューラが良しなに呼び出してくれます。
では、Laravelのタスクスケジューラはどうやって各コマンドの実行時刻を知るのでしょう?
App\Console\kernel.phpに

    protected function schedule(Schedule $schedule)
    {
        $schedule->command('getrss')->withoutOverlapping(10)->hourly();
    }

っとこんな感じで指定します。

  • command('<コマンド名>')でコマンド指定
  • withoutOverlapping()で二重起動防止。引数は分で、この経過時間を超えるとロックが外れる。
    指定しない場合はコマンド処理中でも起動します。
  • 実行間隔を指定(ここでは1時間単位)

Counter: 30, today: 1, yesterday: 0

このページの参照回数は、30です。