Exemplo n.º 1
0
 /**
  * инициализация демона и его входных параметров
  */
 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);
     }
 }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
 /**
  * создаем дочерний процесс и определяем выполняемые в нем функции
  * в качестве параметров передаются массивы в виде 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;
     }
 }
Exemplo n.º 5
0
 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;
 }
Exemplo n.º 6
0
 public function sighup()
 {
     static::log("Got signal to update config");
     if (Config::update()) {
         Logger::init();
     }
 }