settingsRepo->readSettings(); if ($settings->getSyncDisabled()) { $io->error('Automated synchronization is temporarily disabled.'); return 1; } $syncTasksEvent = new GetSyncTasks(); $this->dispatcher->dispatch($syncTasksEvent); $now = CarbonImmutable::now(new DateTimeZone('UTC')); foreach ($syncTasksEvent->getTasks() as $taskClass) { $schedulePattern = $taskClass::getSchedulePattern(); $cronExpression = new CronExpression($schedulePattern); if ($cronExpression->isDue($now)) { $this->start($io, $taskClass); } } $this->manageStartedEvents($io); $settings->updateSyncLastRun(); $this->settingsRepo->writeSettings($settings); return 0; } private function manageStartedEvents(SymfonyStyle $io): void { while ($this->processes) { $this->checkRunningProcesses(); } usleep(250000); } /** * @param SymfonyStyle $io * @param class-string $taskClass */ private function start( SymfonyStyle $io, string $taskClass, ): void { $taskShortName = SingleTaskCommand::getClassShortName($taskClass); $isLongTask = $taskClass::isLongTask(); $timeout = ($isLongTask) ? $this->environment->getSyncLongExecutionTime() : $this->environment->getSyncShortExecutionTime(); $this->lockAndRunConsoleCommand( $io, $taskShortName, 'sync_task', [ 'azuracast:sync:task', $taskClass, ], $timeout ); } }