X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=python%2Fvserver.py;h=cf0b84eaea4554554e6e2db553333c20f513c4cc;hb=42e63a53a5f87b428e35d4a024a903e15a20b5de;hp=7e781342ca2540db3218cd17d0b13a8fc406bbb2;hpb=600840954f3165ccbb804f2e5c30e24ea70c5f8f;p=util-vserver.git diff --git a/python/vserver.py b/python/vserver.py index 7e78134..cf0b84e 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -335,8 +335,9 @@ class VServer: ([], filter_fn))[0] garbage += filter(os.path.isfile, map((LOCKDIR + "/").__add__, os.listdir(LOCKDIR))) - for f in garbage: - os.unlink(f) + if False: + for f in garbage: + os.unlink(f) # set the initial runlevel f = open(RUNDIR + "/utmp", "w") @@ -394,39 +395,18 @@ class VServer: # 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) # we get here due to an exception in the top-level child process except Exception, ex: