def daemonize(self, args): log.setup(self.log_file) log.info("Daemonizing.") self.before_daemonize(args) if unix.still_running(self.name, pid_file_path=self.pid_path): log.error("%s still running. Aborting." % self.name) sys.exit(1) else: unix.daemonize(self.name, pid_file_path=self.pid_path) def shutdown_handler(signal, frame): self.shutdown(signal) sys.exit(0) unix.register_shutdown(shutdown_handler) self.before_jail(args) log.info("Setting up the chroot jail to: %s" % self.run_dir) unix.chroot_jail(self.run_dir) self.before_drop_privs(args) unix.drop_privileges(uid_name=self.uid, gid_name=self.gid) log.info("Server %s running." % self.name) self.start(args)
def parse_cli(self, args): args.pop(0) if not args: log.error("Need a command like start, stop, status.") sys.exit(1) return args[0], args[1:]
def test_message_levels(time_ctime): log.warn("test warning") assert_true(time_ctime.called) time_ctime.reset log.error("test error") assert_true(time_ctime.called) time_ctime.reset log.info("test info") assert_true(time_ctime.called) time_ctime.reset
def run(self, args): command, args = self.parse_cli(args) if command == "start": self.daemonize(args) elif command == "stop": self.stop(args) elif command == "status": self.status(args) else: log.error("Invalid command: %s. Commands are: start, stop, reload, status.") sys.exit(1)
def run(self, args): command, args = self.parse_cli(args) if command == "start": self.daemonize(args) elif command == "stop": self.stop(args) elif command == "status": self.status(args) else: log.error( "Invalid command: %s. Commands are: start, stop, reload, status." ) sys.exit(1)
def daemonize(self, args): log.setup(self.log_file) log.info("Daemonizing.") self.before_daemonize(args) if unix.still_running(self.name, pid_file_path=self.pid_path): log.error("%s still running. Aborting." % self.name) sys.exit(1) else: unix.daemonize(self.name, pid_file_path=self.pid_path) def shutdown_handler(signal, frame): self.shutdown(signal) sys.exit(0) unix.register_shutdown(shutdown_handler) if not os.path.exists(self.run_dir): log.warn("Directory %s does not exist, attempting to create it." % self.run_dir) os.mkdir(self.run_dir) log.info( "Giving default permissions to %s, change them later if you need." % self.run_dir) os.chown(self.run_dir, self.unum, self.gnum) os.chmod(self.run_dir, self.run_dir_mode) if self.should_jail: self.before_jail(args) log.info("Setting up the chroot jail to: %s" % self.run_dir) unix.chroot_jail(self.run_dir) else: log.warn("This daemon does not jail itself, chdir to %s instead" % self.run_dir) os.chdir(self.run_dir) if self.should_drop_priv: self.before_drop_privs(args) unix.drop_privileges(self.unum, self.gnum) else: log.warn("This daemon does not drop privileges.") log.info("Server %s running." % self.name) self.start(args)
def daemonize(self, args): log.setup(self.log_file) log.info("Daemonizing.") self.before_daemonize(args) if unix.still_running(self.name, pid_file_path=self.pid_path): log.error("%s still running. Aborting." % self.name) sys.exit(1) else: unix.daemonize(self.name, pid_file_path=self.pid_path) def shutdown_handler(signal, frame): self.shutdown(signal) sys.exit(0) unix.register_shutdown(shutdown_handler) if not os.path.exists(self.run_dir): log.warn("Directory %s does not exist, attempting to create it." % self.run_dir) os.mkdir(self.run_dir) log.info("Giving default permissions to %s, change them later if you need." % self.run_dir) os.chown(self.run_dir, self.unum, self.gnum) os.chmod(self.run_dir, self.run_dir_mode) if self.should_jail: self.before_jail(args) log.info("Setting up the chroot jail to: %s" % self.run_dir) unix.chroot_jail(self.run_dir) else: log.warn("This daemon does not jail itself, chdir to %s instead" % self.run_dir) os.chdir(self.run_dir) if self.should_drop_priv: self.before_drop_privs(args) unix.drop_privileges(self.unum, self.gnum) else: log.warn("This daemon does not drop privileges.") log.info("Server %s running." % self.name) self.start(args)
def before_drop_privs(self, args): HOST = "0.0.0.0" if self.config: ports = list( int(x) for x in self.config['threadserver.ports'].split()) else: ports = list(int(x) for x in args) log.debug("Ports %r" % ports) if not ports: log.error("You need to list some ports.") sys.exit(1) self.server = None # this gets the last one to do a forever on for PORT in ports: server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler) ip, port = server.server_address server_thread = threading.Thread(target=server.serve_forever) server_thread.daemon = True server_thread.start() self.server = server
def before_drop_privs(self, args): HOST = "0.0.0.0" if self.config: ports = list(int(x) for x in self.config['threadserver.ports'].split()) else: ports = list(int(x) for x in args) log.debug("Ports %r" % ports) if not ports: log.error("You need to list some ports.") sys.exit(1) self.server = None # this gets the last one to do a forever on for PORT in ports: server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler) ip, port = server.server_address server_thread = threading.Thread(target=server.serve_forever) server_thread.daemon = True server_thread.start() self.server = server