/** * main action */ public function mainAction() { $Scheduler = new common_scheduler(); $Scheduler->setCacheable(false); // quick fix to reactivate zombie job // todo: convert scheduler to async script if (rand(0, 20) == 1) { $Scheduler->executeSql("UPDATE common_scheduler SET status = 0 WHERE status = 1 AND (now() - start_time) > INTERVAL '10 minutes'"); } if ($Scheduler->anyPendingJobs() && ($lock_token = $Scheduler->lockPendingJobs()) > 0) { $jobs = $Scheduler->getLockedJobs($lock_token); if (is_array($jobs)) { foreach ($jobs as $job_data) { $Scheduler->setJobStart($job_data['id']); $result = $this->runJob($job_data); $messages = trim(strip_tags(urldecode($result->messages))); $Scheduler->setJobCompleted($job_data['id'], $result->status, $messages); } } else { msg("Scheduler: Invalid lock token!"); } } return true; }