getUser()->setCulture(stLanguage::getOptLanguage()); $config = stConfig::getInstance('stTaskScheluderBackend'); if (!st_task_version_validation($context)) { exit; } $databaseManager = new sfDatabaseManager(); $databaseManager->initialize(); /** * @var stWebRequest $request */ $request = $context->getRequest(); $request->setHostByCulture(stLanguage::getOptLanguage()); $request->setIsSecure(stSecurity::getSSL() == 'shop'); $dispatcher = stEventDispatcher::getInstance(); $dispatcher->connect('task.logger.log', 'st_task_logger_listener'); $config->set(SF_APP . '_cron_error_message', ''); $config->set(SF_APP . '_last_execute_timestamp', time()); $config->save(); stTaskScheluder::initialize(); pake_echo("Rozpoczęcie wykonywania"); stNotification::getInstance()->markAllAsRead('stTaskScheluderPlugin'); // lista tasków do wykonania $tasks = !isset($options['task']) ? array_keys(stTaskConfiguration::getTasks()) : explode(',', $options['task']); foreach ($tasks as $taskId) { if (!stLock::check(SF_APP, SF_ENVIRONMENT, false)) { throw new Exception("Aplikacja zablokowana - Wykonywanie harmonogramu zadań zostaje przerwane"); } $task = stTaskScheluder::getTask($taskId); if (!$task->getTask()->getTaskConfigurationParameter('frontend') && SF_APP == 'frontend' || SF_APP == 'backend' && $task->getTask()->getTaskConfigurationParameter('frontend')) { continue; } if (isset($options['reset']) && $options['reset']) { $task->getTask()->doFinish(); $task->getLogger()->info("Zakończenie wykonywania"); continue; } $offset = 0; if (!$task->getTask()->getIsActive()) { if (isset($options['task'])) { st_task_log($task->getTask(), 'Zadanie **%%task%%** nie jest aktywne', ['%%task%%' => $task->getName()], stTaskLogger::TYPE_WARNING); } continue; } if (!$task->isReadyToExecute() && !isset($options['force'])) { if (isset($options['task'])) { st_task_log($task->getTask(), 'Zadanie **%%task%%** nie wymaga wykonania (użyj parametry --force, aby wymusić wykonanie)', ['%%task%%' => $task->getName()], stTaskLogger::TYPE_WARNING); } continue; } $task->getTask()->doStart(); $task->setParameter('cli', true); if ($options) { $task->setOptions($options); } if (false === $task->doInitialize(true)) { $task->getTask()->doFinish(); continue; } $count = $task->doCount(); $lastOffset = 0; $suspendedJobCounter = 10; while ($offset < $count) { $offset = $task->doExecute($offset); if ($offset == $lastOffset) { $suspendedJobCounter--; } $lastOffset = $offset; if (!$suspendedJobCounter) { $task->getLogger()->warning("Wykryto zapętlenie zadania - Zadanie zostaje automatycznie zakończone"); $task->getTask()->setLastCount(0); $task->getTask()->setLastOffset(0); $task->getTask()->setLastProgress(0); $task->doFinish(); } if ($task->getStatus() != stTask::STATUS_RUNNING) { break 1; } } sleep(1); } $databaseManager->shutdown(); pake_echo("Zakończenie wykonywania"); } if (!function_exists('pake_echo_error')) { function pake_echo_error($message) { if (pakeApp::get_instance()->get_verbose()) { echo pakeColor::colorize($message, 'ERR') . "\n"; } } } function st_task_logger_listener(sfEvent $event) { st_task_log($event['task'], $event['message'], $event['message_params'], $event['type']); } function st_task_log(Task $task, $message, $messageParams = null, $type = stTaskLogger::TYPE_INFO) { $i18n = sfContext::getInstance()->getI18N(); if ($type == stTaskLogger::TYPE_ERROR) { pake_echo_error($i18n->__($message, $messageParams, get_class($task))); } else { $message = $i18n->__($message, $messageParams, get_class($task)); $message = preg_replace_callback_array([ '/\*\*([^\s].*?[^\s]|[^\s])\*\*/' => function(array $matches) { return pakeColor::colorize($matches[1], ['fg' => 'yellow']); }, '/<(https?:\/\/[^>]+)>/' => function(array $matches) { return pakeColor::colorize($matches[0], ['fg' => 'yellow']); }, ], $message); pake_echo_action($task->getName(), $message, 255); } } function st_task_version_validation(sfContext $context) { $i18n = $context->getI18N(); $i18n->setCulture(stLanguage::getOptLanguage()); $currentPhpVersion = phpversion(); $config = stConfig::getInstance('stTaskScheluderBackend'); if (floatval($currentPhpVersion) < 7.1 || floatval($currentPhpVersion) >= 7.5) { $config->set(SF_APP . '_cron_error_message', array( 'message' => 'Do poprawnego działania moduł wymaga wersji PHP 7.1.x - 7.4.x(aktualnie ustawiona wersja PHP: %version%).
Wykonanie harmonogramu zadań zostało wstrzymane.', 'params' => array('%version%' => $currentPhpVersion), )); $config->save(); $errorMessage = $i18n->__('Do poprawnego działania moduł wymaga wersji PHP 7.1.x - 7.4.x (aktualnie ustawiona wersja PHP dla zadania cron: %version%).
Wykonanie harmonogramu zadań zostało wstrzymane.', array('%version%' => phpversion()), 'stTaskScheluderBackend'); pake_echo_error(strip_tags($errorMessage)); return false; } if (!is_file(sfConfig::get('sf_data_dir') . '/.phpversion')) { $config->set(SF_APP . '_cron_error_message', array( 'message' => 'Harmonogram zadań nie był w stanie zidentyfikować wersji PHP sklepu.
Wykonanie harmonogramu zadań zostało wstrzymane.', 'params' => array(), )); $config->save(); $errorMessage = $i18n->__('Harmonogram zadań nie był w stanie zidentyfikować wersji PHP sklepu.
Wykonanie harmonogramu zadań zostało wstrzymane.'); pake_echo_error(strip_tags($errorMessage)); return false; } $shopPhpVersion = file_get_contents(sfConfig::get('sf_data_dir') . '/.phpversion'); $cvc = explode('.', $currentPhpVersion); $svc = explode('.', $shopPhpVersion); if (!version_compare($cvc[0] . '.' . $cvc[1], $svc[0] . '.' . $svc[1], '=')) { $config->set(SF_APP . '_cron_error_message', array( 'message' => 'Do poprawnego działania Harmonogramu zadań wersja PHP dla zadania cron (wersja PHP: %cron_php_version%) musi być taka sama jak wersja PHP sklepu (wersja PHP: %shop_php_version%).
Wykonanie harmonogramu zadań zostało wstrzymane.', 'params' => array('%shop_php_version%' => $shopPhpVersion, '%cron_php_version%' => $currentPhpVersion), )); $config->save(); $errorMessage = $i18n->__('Do poprawnego działania Harmonogramu zadań wersja PHP dla zadania cron (wersja PHP: %cron_php_version%) musi być taka sama jak wersja PHP sklepu (wersja PHP: %shop_php_version%).
Wykonanie harmonogramu zadań zostało wstrzymane.', array( '%shop_php_version%' => $shopPhpVersion, '%cron_php_version%' => $currentPhpVersion )); pake_echo_error(strip_tags($errorMessage)); return false; } return true; }