Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace Illuminate\Console\Scheduling;use Illuminate\Console\Application;use Illuminate\Console\Command;use Illuminate\Console\Events\ScheduledTaskFailed;use Illuminate\Console\Events\ScheduledTaskFinished;use Illuminate\Console\Events\ScheduledTaskSkipped;use Illuminate\Console\Events\ScheduledTaskStarting;use Illuminate\Contracts\Debug\ExceptionHandler;use Illuminate\Contracts\Events\Dispatcher;use Illuminate\Support\Carbon;use Illuminate\Support\Facades\Date;use Symfony\Component\Console\Attribute\AsCommand;use Throwable;#[AsCommand(name: 'schedule:run')]class ScheduleRunCommand extends Command{/*** The console command name.** @var string*/protected $name = 'schedule:run';/*** The name of the console command.** This name is used to identify the command during lazy loading.** @var string|null** @deprecated*/protected static $defaultName = 'schedule:run';/*** The console command description.** @var string*/protected $description = 'Run the scheduled commands';/*** The schedule instance.** @var \Illuminate\Console\Scheduling\Schedule*/protected $schedule;/*** The 24 hour timestamp this scheduler command started running.** @var \Illuminate\Support\Carbon*/protected $startedAt;/*** Check if any events ran.** @var bool*/protected $eventsRan = false;/*** The event dispatcher.** @var \Illuminate\Contracts\Events\Dispatcher*/protected $dispatcher;/*** The exception handler.** @var \Illuminate\Contracts\Debug\ExceptionHandler*/protected $handler;/*** The PHP binary used by the command.** @var string*/protected $phpBinary;/*** Create a new command instance.** @return void*/public function __construct(){$this->startedAt = Date::now();parent::__construct();}/*** Execute the console command.** @param \Illuminate\Console\Scheduling\Schedule $schedule* @param \Illuminate\Contracts\Events\Dispatcher $dispatcher* @param \Illuminate\Contracts\Debug\ExceptionHandler $handler* @return void*/public function handle(Schedule $schedule, Dispatcher $dispatcher, ExceptionHandler $handler){$this->schedule = $schedule;$this->dispatcher = $dispatcher;$this->handler = $handler;$this->phpBinary = Application::phpBinary();$this->newLine();foreach ($this->schedule->dueEvents($this->laravel) as $event) {if (! $event->filtersPass($this->laravel)) {$this->dispatcher->dispatch(new ScheduledTaskSkipped($event));continue;}if ($event->onOneServer) {$this->runSingleServerEvent($event);} else {$this->runEvent($event);}$this->eventsRan = true;}if (! $this->eventsRan) {$this->components->info('No scheduled commands are ready to run.');} else {$this->newLine();}}/*** Run the given single server event.** @param \Illuminate\Console\Scheduling\Event $event* @return void*/protected function runSingleServerEvent($event){if ($this->schedule->serverShouldRun($event, $this->startedAt)) {$this->runEvent($event);} else {$this->components->info(sprintf('Skipping [%s], as command already run on another server.', $event->getSummaryForDisplay()));}}/*** Run the given event.** @param \Illuminate\Console\Scheduling\Event $event* @return void*/protected function runEvent($event){$summary = $event->getSummaryForDisplay();$command = $event instanceof CallbackEvent? $summary: trim(str_replace($this->phpBinary, '', $event->command));$description = sprintf('<fg=gray>%s</> Running [%s]%s',Carbon::now()->format('Y-m-d H:i:s'),$command,$event->runInBackground ? ' in background' : '',);$this->components->task($description, function () use ($event) {$this->dispatcher->dispatch(new ScheduledTaskStarting($event));$start = microtime(true);try {$event->run($this->laravel);$this->dispatcher->dispatch(new ScheduledTaskFinished($event,round(microtime(true) - $start, 2)));$this->eventsRan = true;} catch (Throwable $e) {$this->dispatcher->dispatch(new ScheduledTaskFailed($event, $e));$this->handler->report($e);}return $event->exitCode == 0;});if (! $event instanceof CallbackEvent) {$this->components->bulletList([$event->getSummaryForDisplay(),]);}}}