writeln("Running Loop..."); // wait for next minute $now = new DateTimeImmutable(); $nextMinute = new DateTimeImmutable($now->format('Y-m-d H:i:00')); $nextMinute->add(new \DateInterval('PT1M')); $diff = $nextMinute->getTimestamp() - $now->getTimestamp(); if ($diff > 0) { $output->writeln("Waiting {$diff} seconds..."); sleep($diff); } $output->writeln('Starting loop...'); while (true) { $commands = $this->scheduleService->run(); foreach ($commands as $command) { $this->runCommand($input, $output, $command); } } return self::SUCCESS; } protected function runCommand(Console\Input\InputInterface $input, Console\Output\OutputInterface $output, string $commandName): int { try { $command = $this->getApplication()->find($commandName); } catch (Console\Exception\CommandNotFoundException $exception) { $this->logger->warning($exception); } $cmd = new Console\Input\ArrayInput([ 'command' => $commandName ]); try { return $this->getApplication()->doRun($cmd, $output); } catch (Throwable $exception) { $this->logger->warning($exception); return self::FAILURE; } } }