static function execute($cronjobID) { $lockToken = md5(TIMESTAMP); $db = Database::get(); $sql = 'SELECT class FROM %%CRONJOBS%% WHERE isActive = :isActive AND cronjobID = :cronjobId AND `lock` IS NULL;'; $cronjobClassName = $db->selectSingle($sql, array(':isActive' => 1, ':cronjobId' => $cronjobID), 'class'); if (empty($cronjobClassName)) { throw new Exception(sprintf("Unknown cronjob %s or cronjob is deactive!", $cronjobID)); } $sql = 'UPDATE %%CRONJOBS%% SET `lock` = :lock WHERE cronjobID = :cronjobId;'; $db->update($sql, array(':lock' => $lockToken, ':cronjobId' => $cronjobID)); $cronjobPath = 'includes/classes/cronjob/' . $cronjobClassName . '.class.php'; // die hard, if file not exists. require_once $cronjobPath; /** @var $cronjobObj CronjobTask */ $cronjobObj = new $cronjobClassName(); $cronjobObj->run(); self::reCalculateCronjobs($cronjobID); $sql = 'UPDATE %%CRONJOBS%% SET `lock` = NULL WHERE cronjobID = :cronjobId;'; $db->update($sql, array(':cronjobId' => $cronjobID)); $sql = 'INSERT INTO %%CRONJOBS_LOG%% SET `cronjobId` = :cronjobId, `executionTime` = :executionTime, `lockToken` = :lockToken'; $db->insert($sql, array(':cronjobId' => $cronjobID, ':executionTime' => Database::formatDate(TIMESTAMP), ':lockToken' => $lockToken)); }