/** * Singleton class loader * @return ezpContentPublishingQueueProcessor */ public static function instance() { if (!self::$instance instanceof ezpContentPublishingQueueProcessor) { self::$instance = new ezpContentPublishingQueueProcessor(); // signal handler for children termination signal self::$instance->registerSignalHandler(); } return self::$instance; }
// stop output completely fclose(STDIN); fclose(STDOUT); fclose(STDERR); // terminate the parent posix_kill($parentProcessID, SIGUSR1); } else { $cli->output("Running in interactive mode. Hit ctrl-c to interrupt."); } if ($options['daemon']) { $output = new ezpAsynchronousPublisherLogOutput(); } else { $output = new ezpAsynchronousPublisherCliOutput(); } // actual daemon code $processor = ezpContentPublishingQueueProcessor::instance(); $processor->setOutput($output); $processor->setSignalHandler($daemonSignalHandler); $processor->run(); eZScript::instance()->shutdown(0); /** * Signal handler * @param int $signo Signal number */ function childHandler($signo) { switch ($signo) { case SIGALRM: eZScript::instance()->shutdown(1); break; case SIGUSR1:
/** * Signal handler for the daemon process * @param int $signo Signal number */ function daemonSignalHandler($signo) { switch ($signo) { case SIGTERM: case SIGINT: flock($GLOBALS['pidFp'], LOCK_UN); fclose($GLOBALS['pidFp']); ezpContentPublishingQueueProcessor::terminate(); @unlink($GLOBALS['pidFile']); eZScript::instance()->shutdown(0); break; } }