예제 #1
0
 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