Viewing file: ScheduleRunCommand.php (5.2 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace 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(), ]); } } }
|