<?php namespace Illuminate\Console\Scheduling; use Illuminate\Console\Command; use Illuminate\Support\Facades\Date; class ScheduleRunCommand extends Command { /** * The console command name. * * @var string */ protected $name = '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; /** * Create a new command instance. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ public function __construct(Schedule $schedule) { $this->schedule = $schedule; $this->startedAt = Date::now(); parent::__construct(); } /** * Execute the console command. * * @return void */ public function handle() { foreach ($this->schedule->dueEvents($this->laravel) as $event) { if (! $event->filtersPass($this->laravel)) { continue; } if ($event->onOneServer) { $this->runSingleServerEvent($event); } else { $this->runEvent($event); } $this->eventsRan = true; } if (! $this->eventsRan) { $this->info('No scheduled commands are ready to run.'); } } /** * 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->line('<info>Skipping command (has already run on another server):</info> '.$event->getSummaryForDisplay()); } } /** * Run the given event. * * @param \Illuminate\Console\Scheduling\Event $event * @return void */ protected function runEvent($event) { $this->line('<info>Running scheduled command:</info> '.$event->getSummaryForDisplay()); $event->run($this->laravel); $this->eventsRan = true; } }