def main(): logger.configure_logs() wyvern.init(os.path.dirname(__file__)) if wyvern.CREATE_PID: if wyvern.DAEMON: pid_dir = os.path.dirname(wyvern.PID_FILE) if not os.access(pid_dir, os.F_OK): sys.exit("PID dir: " + pid_dir + " doesn't exist. Exiting.") if not os.access(pid_dir, os.W_OK): sys.exit("PID dir: " + pid_dir + " must be writable (write permissions). Exiting.") else: sys.stdout.write("Not running in daemon mode. PID file creation disabled.\n") wyvern.CREATEPID = False logger.error(wyvern.PID_FILE) if wyvern.DAEMON: daemonize() webinit.webinit() wyvern.start() while not wyvern.STOP_EVENT.isSet(): time.sleep(1)
try: pid = os.fork() # @UndefinedVariable - only available in UNIX if pid != 0: os._exit(0) except OSError, e: sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) sys.exit(1) # Write pid if wyvern.CREATE_PID: pid = str(os.getpid()) logger.debug(u"Writing PID: " + pid + " to " + str(wyvern.PID_FILE)) try: file(wyvern.PID_FILE, 'w').write("%s\n" % pid) except IOError, e: logger.error(u"Unable to write PID file: " + wyvern.PID_FILE + " Error: " + str(e.strerror) + " [" + str( e.errno) + "]") wyvern.halt() # Redirect all output sys.stdout.flush() sys.stderr.flush() devnull = getattr(os, 'devnull', '/dev/null') stdin = file(devnull, 'r') stdout = file(devnull, 'a+') stderr = file(devnull, 'a+') os.dup2(stdin.fileno(), sys.stdin.fileno()) os.dup2(stdout.fileno(), sys.stdout.fileno()) os.dup2(stderr.fileno(), sys.stderr.fileno())