перезапустить задания в планировщике laravel

Я хочу повторно запустить задания в laravel Scheduler в случае сбоя, предположим следующее:
Kernal.php

protected function schedule(Schedule $schedule)
{
    $this->generateData($schedule);

}

protected function generateData($schedule){

   $schedule->command('My Command')
   ->monthly()
   ->after(function ($schedule){
     $command = DB::table('commands')
     ->where("name","My Command")
     ->orderBy('id', 'desc')
     ->first();
     if(!$command->succeeded){
       echo "task not finished";
       $this->generateData($schedule);
     }
     else{
       echo "task finished";
       return;
     }
   });
 }

эта команда иногда дает сбой, после функции я проверяю, не сработала ли команда, затем я пытаюсь выполнить ее снова, но это не сработало, и я получил следующую ошибку:
[ErrorException] Отсутствует аргумент 1 для App\Console\Kernel::App\Console{закрытие}()

какие-либо предложения ?


person Mahmoud Abd AL Kareem    schedule 15.09.2017    source источник


Ответы (1)


Вы неправильно устанавливаете $schedule в анонимной функции, используйте оператор use следующим образом:

protected function generateData($schedule){

  $schedule->command('My Command')
  ->monthly()
  ->after(function() use ($schedule){
    $command = DB::table('commands')
    ->where("name","My Command")
    ->orderBy('id', 'desc')
    ->first();
    if(!$command->succeeded){
      echo "task not finished";
      $this->generateData($schedule);
    }
    else{
      echo "task finished";
      return;
    }
  });
}
person Erik Dohmen    schedule 16.09.2017