From 6b519e079f20c286c19c6ed564bffbeb3b6f15e4 Mon Sep 17 00:00:00 2001 From: Faiyaz Ahmed Date: Tue, 17 Jul 2007 18:44:58 +0000 Subject: [PATCH] Includes Sapan's initscript fix. --- python/vserver.py | 51 ++++++++++++++--------------------------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/python/vserver.py b/python/vserver.py index 1c85a94..b0afd42 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -19,7 +19,7 @@ import cpulimit, bwlimit from vserverimpl import VS_SCHED_CPU_GUARANTEED as SCHED_CPU_GUARANTEED from vserverimpl import DLIMIT_INF - +# $Id$ # # these are the flags taken from the kernel linux/vserver/legacy.h @@ -315,41 +315,20 @@ class VServer: # perform pre-init cleanup self.__prep(runlevel, log) - # execute each init script in turn - # XXX - we don't support all scripts that vserver script does - cmd_pid = 0 - first_child = True - for cmd in self.INITSCRIPTS + [None]: - # wait for previous command to terminate, unless it - # is the last one and the caller has specified to wait - if cmd_pid and (cmd != None or wait): - try: - os.waitpid(cmd_pid, 0) - except: - print >>log, "error waiting for %s:" % cmd_pid - traceback.print_exc() - - # end of list - if cmd == None: - os._exit(0) - - # fork and exec next command - cmd_pid = os.fork() - if cmd_pid == 0: - try: - # enter vserver context - self.__do_chcontext(state_file) - arg_subst = { 'runlevel': runlevel } - cmd_args = [cmd[0]] + map(lambda x: x % arg_subst, - cmd[1:]) - print >>log, "executing '%s'" % " ".join(cmd_args) - os.execl(cmd[0], *cmd_args) - except: - traceback.print_exc() - os._exit(1) - else: - # don't want to write state_file multiple times - state_file = None + self.__do_chcontext(state_file) + + for cmd in self.INITSCRIPTS + [None]: + try: + # enter vserver context + arg_subst = { 'runlevel': runlevel } + cmd_args = [cmd[0]] + map(lambda x: x % arg_subst, + cmd[1:]) + print >>log, "executing '%s'" % " ".join(cmd_args) + os.spawnvp(os.P_WAIT,cmd[0],*cmd_args) + except: + traceback.print_exc() + os._exit(1) + state_file = None # we get here due to an exception in the top-level child process except Exception, ex: -- 2.43.0