static function runScript($cli, $scriptFile) { $scriptMutex = new eZMutex($scriptFile); $lockTS = $scriptMutex->lockTS(); $runScript = false; $maxTime = self::maxScriptExecutionTime(); if ($lockTS === false) { if ($scriptMutex->lock()) { $scriptMutex->setMeta('pid', getmypid()); $runScript = true; } else { $cli->error('Failed to aquire cronjob part lock: ' . $scriptFile); } } else { if ($lockTS < time() - 2 * $maxTime) { $cli->output('Forcing to steal the mutex lock: ' . $scriptFile); $runScript = eZRunCronjobs::stealMutex($cli, $scriptMutex, true); } else { if ($lockTS < time() - $maxTime) { $cli->output('Trying to steal the mutex lock: ' . $scriptFile); $runScript = eZRunCronjobs::stealMutex($cli, $scriptMutex); } else { $cli->output('Cronjob part locked by other process: ' . $scriptMutex->meta('pid')); } } } if ($runScript) { global $script; global $isQuiet; global $cronPart; include $scriptFile; $scriptMutex->unlock(); } }
function steal($force = false) { $stealMutex = new eZMutex($this->Name . eZMutex::STEAL_STRING); if (!$force) { // Aquire a steal mutex, and steal the mutex. if ($stealMutex->test()) { return false; } if ($stealMutex->lock()) { $stealMutex->setMeta('pid', getmypid()); if ($this->lock()) { // sleep for 1 second in case lock has only been granted beacause a larger // cleanup is in progress. sleep(1); $stealMutex->unlock(); return true; } } } else { $stealPid = $stealMutex->meta('pid'); if (is_numeric($stealPid) && $stealPid != 0 && function_exists('posix_kill')) { eZDebug::writeNotice('Killing steal mutex process: ' . $stealPid); posix_kill($stealPid, 9); } // If other steal mutex exists, kill it, and create your own. $this->unlock(); return $this->lock(); } return false; }