def run(self): logger.info("-- starting mandelbrot agent --") # execute any privileged subsystem code self.privilegedStartService() # set the process title setproctitle("mandelbrot-agent") # construct the daemon context daemon = DaemonContext() daemon.prevent_core = True daemon.chroot_directory = None daemon.working_directory = "/" if self.pidfile is not None: daemon.pidfile = TimeoutPIDLockFile(self.pidfile) if os.getuid() == 0: daemon.uid = self.uid daemon.gid = self.gid elif self.uid is not None or self.gid is not None: logger.warning("not dropping privileges, process uid is not 0") # FIXME: hack to ensure that fds stay open when passed to daemon context daemon.files_preserve = [x for x in xrange(64)] if self.foreground: daemon.detach_process = False daemon.stdin = sys.stdin daemon.stdout = sys.stdout daemon.stderr = sys.stderr else: daemon.detach_process = True with daemon: from twisted.internet import reactor self.startService() reactor.run() logger.info("-- stopping mandelbrot agent --") self.stopService() logger.info("-- stopped mandelbrot agent --") return 0