/** * инициализация демона и его входных параметров */ protected static function init(Application $appl = null, $configFile = null) { register_shutdown_function('Daemon\\Daemon::errorHandlerFatal'); //разберем аргументы, переданные через командную строку static::$args = static::parseArgsString(implode(' ', array_slice($_SERVER['argv'], 1))); //загрузим конфиг из файла if (empty(static::$args['c'])) { static::$args['c'] = $configFile ?: getcwd() . '/' . self::DEFAULT_CONFIG_FILE; } Config::load(static::$args['c']); //объединяем параметры, переданные через командную строку и из файла конфигурации Config::mergeArgs(static::$args); if (Config::get('Daemon.log_php_errors', true)) { set_error_handler('Daemon\\Daemon::errorHandler'); error_reporting(0); } //show help if (Config::get('Flags.help')) { static::setRunmode(self::RUNMODE_HELP); } //открываем лог файл Logger::init(static::getName()); static::$pidfile = static::getPidFileName(); static::getPid(); if (empty(static::$appl) && !empty($appl)) { static::setApplication($appl); } }
public static function log($msg, $level = Logger::L_ERROR, $sender = '', $to_stderr = false) { if ($level <= Config::get('Logger.verbose')) { if ($level == static::L_FATAL) { $to_stderr = true; } Logger::logWithSender(static::addLabel($msg, $level), $sender, $to_stderr); } }
public final function baseOnShutdown() { try { static::log("'onShutdown' method running", Logger::L_TRACE); return $this->onShutdown(); } catch (Exception $e) { static::log(Logger::buildExceptionMsg($e), $e->getCode(), $e->getThrower()); static::throwException($e->getMessage(), Logger::L_FATAL, $e); } catch (\Exception $e) { static::log(Logger::buildExceptionMsg($e), Logger::L_FATAL); static::throwException($e->getMessage(), Logger::L_FATAL, $e); } }
/** * создаем дочерний процесс и определяем выполняемые в нем функции * в качестве параметров передаются массивы в виде array(Object,'function_name') * * @param <user_function> $_before * @param <user_function> $_runtime * @param <user_function> $_after * @return $pid */ public function spawnChild(Application $appl, $collection_name = self::MAIN_COLLECTION_NAME) { if ($this->canSpawnChild($collection_name)) { //переоткрываем логи (вдруг файл лога удалили) Logger::openLogs(); //увеличиваем счетчик ++$this->child_count; static::log('Spawning a child', Logger::L_DEBUG); $thread = new Thread_Child(); //инициализируем функции $thread->setApplication($appl); //запускаем процесс $pid = $thread->start(); if (-1 === $pid) { throw new \Exception('Сould not start child'); } //добавляем процесс в коллекцию $this->child_collections[$collection_name]->push($thread); return $pid; } }
public static function throwException($message, $code = Logger::L_ERROR, \Exception $previous = null) { $e = new Exception($message, $code, $previous); $e->setThrower($previous instanceof Exception && $previous->getThrower() ? $previous->getThrower() : Logger::getSenderName(get_called_class())); throw $e; }
public function sighup() { static::log("Got signal to update config"); if (Config::update()) { Logger::init(); } }