fix restart without cfg
restart did not work when no cfg was given and process was in zombie state + fix restart 'all'
This commit is contained in:
parent
91cf31dde5
commit
42125b9887
11
base.py
11
base.py
@ -170,7 +170,9 @@ class ServiceManager:
|
||||
def get_procs(self, groups=None, cfginfo=None):
|
||||
"""return processes
|
||||
|
||||
result is a dict[ins] of dict[service] of list of tuples (process, cfg)
|
||||
:param groups: group to look for or None for all groups
|
||||
:param cfginfo: cfginfo dict to be populated
|
||||
:result: a dict[ins] of dict[service] of list of tuples (process, cfg)
|
||||
"""
|
||||
|
||||
result = {}
|
||||
@ -240,8 +242,7 @@ class ServiceManager:
|
||||
try:
|
||||
p.wait(0.1 * i)
|
||||
except psutil.TimeoutExpired:
|
||||
if p.status() == psutil.STATUS_ZOMBIE:
|
||||
break
|
||||
if p.status() != psutil.STATUS_ZOMBIE:
|
||||
if print_wait and i > 4:
|
||||
print('wait for %s %s' % (ins, service))
|
||||
print_wait = False
|
||||
@ -368,8 +369,12 @@ class ServiceManager:
|
||||
os.chdir(wd)
|
||||
|
||||
def do_restart(self, ins, service=None, cfg=None, logger=None):
|
||||
if ins is None:
|
||||
raise UsageError("need instance or 'all' or wildcard")
|
||||
ins_list = self.wildcard(ins)
|
||||
if ins_list is not None:
|
||||
if cfg is not None:
|
||||
raise UsageError('can not restart several instances with %s' % cfg)
|
||||
return ins_list
|
||||
self.do_start(ins, service, cfg, True, logger=logger)
|
||||
|
||||
|
@ -94,6 +94,15 @@ class FrappyManager(ServiceManager):
|
||||
raise UsageError('need service to start (one of %s)' % ', '.join(self.services))
|
||||
super().do_start(ins, service, cfg, restart, wait, logger)
|
||||
|
||||
def do_restart(self, ins, service=None, cfg=None, logger=None):
|
||||
ins_list = super().do_restart(ins, service, cfg, logger)
|
||||
if ins_list: # wildcard used
|
||||
# determine running processes with cfg
|
||||
cfginfo = {}
|
||||
self.get_procs(None, cfginfo)
|
||||
cfgs = {i for i, s in cfginfo if s == service or service is None}
|
||||
return [i for i in ins_list if i in cfgs]
|
||||
|
||||
def check_server(self, ins='', service='main'):
|
||||
start_dir, env = self.prepare_start(ins, service)
|
||||
sys.path.insert(0, start_dir)
|
||||
|
Loading…
x
Reference in New Issue
Block a user