def _start(self): fmt = log.UtcFormatter('%(asctime)s %(name)s n %(message)s') if self._opts.foreground: # send logger output to console ch = logging.StreamHandler(sys.stderr) ch.setFormatter(fmt) ch.setLevel(logging.DEBUG) self._logger.addHandler(ch) self._logPath = '/dev/null' self._logFile = None if self._logFname is not None: logPathTemplate = os.path.join(self._logDir, self._logFname) try: self._logPath, self._logFile = (log.openLogFromTemplate( 'pyraptord', logPathTemplate, {})) except Exception as e: # pylint: disable=W0702 import traceback traceback.print_exc() self._logger.error('could not open log file %s!', logPathTemplate) if self._logFile is not None: # send logger output to file lh = logging.StreamHandler(self._logFile) lh.setFormatter(fmt) lh.setLevel(logging.DEBUG) self._logger.addHandler(lh) self._logger.debug('installing signal handlers') for sig in self._getSignalsToHandle(): signal.signal(sig, self._handleSignal) gevent.spawn(self._disableGeventDefaultSigintHandler) # load ports config self._ports = loadConfig(self._config.PORTS) self._port = self._ports[self._name].rpc if not self._opts.foreground: self._logger.debug('daemonizing') daemonize.daemonize('pyraptord', self._logFile, detachTty=not self._opts.noFork) # start startup services if 'startup' in self._config.GROUPS: startupGroup = self._config.GROUPS.startup self._logger.debug('startup group: %s', startupGroup) for svcName in startupGroup: self.startService(svcName) else: self._logger.debug('no group named "startup"') self._jobs.append(gevent.spawn(self._cleanupChildren))
def _start(self): fmt = log.UtcFormatter('%(asctime)s %(name)s n %(message)s') if self._opts.foreground: # send logger output to console ch = logging.StreamHandler(sys.stderr) ch.setFormatter(fmt) ch.setLevel(logging.DEBUG) self._logger.addHandler(ch) self._logPath = '/dev/null' self._logFile = None if self._logFname is not None: logPathTemplate = os.path.join(self._logDir, self._logFname) try: self._logPath, self._logFile = (log.openLogFromTemplate ('pyraptord', logPathTemplate, {})) except Exception as e: # pylint: disable=W0702 import traceback traceback.print_exc() self._logger.error('could not open log file %s!', logPathTemplate) if self._logFile is not None: # send logger output to file lh = logging.StreamHandler(self._logFile) lh.setFormatter(fmt) lh.setLevel(logging.DEBUG) self._logger.addHandler(lh) self._logger.debug('installing signal handlers') for sig in self._getSignalsToHandle(): signal.signal(sig, self._handleSignal) gevent.spawn(self._disableGeventDefaultSigintHandler) # load ports config self._ports = loadConfig(self._config.PORTS) self._port = self._ports[self._name].rpc if not self._opts.foreground: self._logger.debug('daemonizing') daemonize.daemonize('pyraptord', self._logFile, detachTty=not self._opts.noFork) # start startup services if 'startup' in self._config.GROUPS: startupGroup = self._config.GROUPS.startup self._logger.debug('startup group: %s', startupGroup) for svcName in startupGroup: self.startService(svcName) else: self._logger.debug('no group named "startup"') self._jobs.append(gevent.spawn(self._cleanupChildren))
def start(self): if not self.isStartable(): raise prexceptions.ServiceAlreadyActive(self._name) cmdArgs = shlex.split(self.getCommand().encode('utf8')) self._logger = logging.getLogger('service.%s' % self._name) self._logger.setLevel(logging.DEBUG) self._logger.propagate = False #self._logBuffer = log.LineBuffer() # FIX: add handler for line buffer logName = self.getLogNameTemplate() self._log = None if logName is not None: logPath = os.path.join(self._parent._logDir, logName) try: _fname, self._log = (log.openLogFromTemplate (self._name, logPath, self._env)) except: # pylint: disable=W0702 # traceback.print_exc() self._parent._logger.warning('could not open log file for service %s at path %s', self._name, logPath) if self._log is not None: #sh = logging.StreamHandler(self._log) fmt = log.UtcFormatter('%(asctime)s %(name)s %(message)s') self._streamHandler = log.AutoFlushStreamHandler(self._log) self._streamHandler.setLevel(logging.DEBUG) self._streamHandler.setFormatter(fmt) self._logger.addHandler(self._streamHandler) #self._publishHandler = log.PublishHandler(self._parent._qrouter) #self._publishHandler.setLevel(logging.DEBUG) #self._publishHandler.setFormatter(fmt) #self._logger.addHandler(self._publishHandler) stdinPath = self.getStdin() if stdinPath is None: childStdinReadFd = subprocess.PIPE popenStdin = childStdinReadFd else: popenStdin = None stdoutPath = self.getStdout() if stdoutPath is None: childStdoutReadFd, childStdoutWriteFd = trackerG.openpty(self._name) popenStdout = childStdoutWriteFd else: popenStdout = None childStderrReadFd, childStderrWriteFd = trackerG.openpty(self._name) trackerG.debug() self._eventLogger = self._logger.getChild('evt n') self._eventLogger.setLevel(logging.DEBUG) childEnv = os.environ.copy() for k, v in self.getEnvVariables().iteritems(): if v is None: if k in childEnv: del childEnv[k] else: childEnv[k] = v self._eventLogger.info('starting') escapedArgs = ' '.join(['"%s"' % arg for arg in cmdArgs]) self._eventLogger.info('command: %s', escapedArgs) if self.getStdin() or self.getStdout(): popenClass = PopenNoErrPipe else: popenClass = subprocess.Popen startupError = None try: self._proc = popenClass(cmdArgs, stdin=popenStdin, stdout=popenStdout, stderr=childStderrWriteFd, env=childEnv, close_fds=True, cwd=self.getWorkingDir(), preexec_fn=self.openExternalStreams) except OSError, oe: if oe.errno == errno.ENOENT: startupError = ('is executable "%s" in PATH? Popen call returned no such file or directory' % cmdArgs[0]) else: startupError = oe