Laravelのタスクスケジュール便利ですよね。

ジョブ管理ツールのように『タスクAが成功したらタスクBを処理する』といった事もできました。

タスクAが成功したらタスクBを処理する

app/Console/Kernel.php

class Kernel extends ConsoleKernel
{
    protected function schedule(Schedule $schedule)
    {
        //毎時タスクAを実行する。成功した場合にタスクBも実行する。
        $schedule->command('app:taskB')->hourly()->when(function () {
                return Artisan::call('app:taskA');
        });
    }
}

解説

whenメソッドはtrueのときにタスクを実行します。
Artisan::callはexitコードを返すので、taskAを下記のようにすることで処理結果の判定が可能です。

app/Console/Commands/taskA.php

class taskA extends Command
{
    protected $signature = 'app:taskA';

    public function handle()
    {
        if (処理) {
            // 成功したら1を返す
            return 1;
        }

        // 失敗したら0を返す(何も返さない場合も0だけど明示的に)
        return 0;
    }
}

ステキです。

Tags:

Updated: