def start(self): '''Maps to the CLI command and starts one or more Wishbone processes in background. ''' router_config = ConfigFile(self.config, 'SYSLOG').dump() pid_file = PIDFile(self.pid) with DaemonContext(stdout=sys.stdout, stderr=sys.stderr, detach_process=True): if self.instances == 1: sys.stdout.write("\nWishbone instance started with pid %s\n" % (os.getpid())) sys.stdout.flush() pid_file.create([os.getpid()]) self.initializeRouter(router_config) else: for instance in range(self.instances): self.routers.append( gipc.start_process(self.initializeRouter, args=(router_config, ), daemon=True)) pids = [str(p.pid) for p in self.routers] print(("\nInstances started in foreground with pid %s\n" % (", ".join(pids)))) pid_file.create(pids) self.bootstrapBlock()
def start(self, command, config, instances, pid, queue_size, frequency, identification): ''' Handles the Wishbone start command. ''' config = self.config.load(config) self.pid = PIDFile(pid) if instances == 1: print ("Starting 1 instance to background with pid %s." % (os.getpid())) try: with DaemonContext(stdout=sys.stdout, stderr=sys.stderr, files_preserve=self.__getCurrentFD(), detach_process=True): self.pid.create([os.getpid()]) instance = RouterBootstrap(config, debug=False, queue_size=queue_size, frequency=frequency, identification=identification) instance.start() except Exception as err: sys.stdout.write("Failed to start instance. Reason: %s\n" % (err)) else: try: print "Starting %s instances in background." % (instances) with DaemonContext(stdout=sys.stdout, stderr=sys.stderr, files_preserve=self.__getCurrentFD(), detach_process=True): pids = [] processes = [] for counter in xrange(instances): processes.append(RouterBootstrapProcess(config, debug=False, queue_size=queue_size, frequency=frequency, identification=identification)) processes[-1].start() pids.append(processes[-1].pid) self.pid.create(pids) for process in processes: process.join() except Exception as err: sys.stdout.write("Failed to start instance. Reason: %s\n" % (err))
def stop(self): '''Maps to the CLI command and stop the running Wishbone processes. ''' try: pid = PIDFile(self.pid) sys.stdout.write("Stopping instance with PID ") sys.stdout.flush() for entry in pid.read(): sys.stdout.write(" %s " % (entry)) sys.stdout.flush() pid.sendSigint(entry) pid.cleanup() print("") except Exception as err: print("") print(("Failed to stop instances. Reason: %s" % (err)))
def stop(self, command, pid): ''' Handles the Wishbone stop command. ''' try: pid = PIDFile(pid) sys.stdout.write("Stopping instance with PID ") sys.stdout.flush() for entry in pid.read(): sys.stdout.write(" %s " % (entry)) sys.stdout.flush() pid.sendSigint(entry) pid.cleanup() print("") except Exception as err: print ("") print ("Failed to stop instances. Reason: %s" % (err))