From 9709be7815ad414d02a8c6bc942ffd0a64bb73aa Mon Sep 17 00:00:00 2001 From: Steve Muir Date: Fri, 3 Jun 2005 19:23:42 +0000 Subject: [PATCH] Add method to start a vserver --- python/vserver.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/python/vserver.py b/python/vserver.py index 282de70..9ac2cd5 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -4,6 +4,7 @@ import errno import fcntl import os import re +import traceback import linuxcaps import passfdimpl @@ -41,6 +42,8 @@ FLAGS_NAMESPACE = 128 class VServer: + INITSCRIPTS = [('/etc/rc.vinit', 'start'), ('/etc/rc.d/rc', '3')] + def __init__(self, name): self.name = name @@ -138,3 +141,35 @@ class VServer: print >>state_file, "S_CONTEXT=%d" % self.ctx print >>state_file, "S_PROFILE=%s" % self.config.get("S_PROFILE", "") state_file.close() + + def start(self): + + child_pid = os.fork() + if child_pid == 0: + # child process + try: + # get a new session + os.setsid() + + # enter vserver context + self.enter() + + # use /dev/null for stdin, /var/log/boot.log for stdout/err + os.close(0) + os.close(1) + os.open("/dev/null", os.O_RDONLY) + os.open("/var/log/boot.log", + os.O_WRONLY | os.O_CREAT | os.O_TRUNC) + os.dup2(1, 2) + + # write same output that vserver script does + os.write(1, "Starting the virtual server %s\n" % self.name) + os.write(1, "Server %s is not running\n" % self.name) + + # execute each init script in turn + # XXX - we don't support all the possible scripts + for cmd in self.INITSCRIPTS: + os.spawnl(os.P_WAIT, *cmd) + except Exception, ex: + traceback.print_exc() + os._exit(0) -- 2.43.0