Я хочу перезапустить задания в планировщике laravel в случае сбоя, предположим следующее:
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 {closure} ()
какие-либо предложения ?
Вы неправильно устанавливаете $ 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;
}
});
}
Других решений пока нет …