/** * @see parent::onAfterMain() */ function onAfterMain() { $cron_log_id = CValue::get("execute_cron_log_id"); if (!$cron_log_id) { return; } //Mise à jour du statut du log suite à l'appel au script $cron_log = new CCronJobLog(); $cron_log->load($cron_log_id); if (CCronJobLog::$log) { $cron_log->status = "error"; $cron_log->error = CCronJobLog::$log; $cron_log->end_datetime = CMbDT::dateTime(); } else { $cron_log->status = "finished"; $cron_log->end_datetime = CMbDT::dateTime(); } $cron_log->store(); }
$now = CMbDT::dateTime(); $cronjob = new CCronJob(); $cronjob->active = "1"; /** @var CCronJob[] $cronjobs */ $cronjobs = $cronjob->loadMatchingList(); $server_addr = get_server_var("SERVER_ADDR"); //Parcours des tâches actives foreach ($cronjobs as $_cronjob) { if ($_cronjob->_servers && !in_array($server_addr, $_cronjob->_servers)) { continue; } //Récupération de la prochaine date d'éxécution $next = $_cronjob->getNextDate(1); $next = current($next); $tolerance = CMbDT::dateTime("+ 5 SECOND", $next); //On vérifie si le script doit être éxécuté if ($next <= $now && $now <= $tolerance) { //Log d'attente $cronjob_log = new CCronJobLog(); $cronjob_log->start_datetime = $now; $cronjob_log->cronjob_id = $_cronjob->_id; $cronjob_log->status = "started"; $cronjob_log->server_address = $server_addr; $cronjob_log->store(); $_cronjob->_params["execute_cron_log_id"] = $cronjob_log->_id; //Lancement du processus fils pour éxécuter la requête $url = escapeshellarg($_cronjob->makeUrl()); //pclose(popen("start /SEPARATE wget.exe $url -qO NUL", "r")); exec("wget -q {$url} &> /dev/null"); } }