Don't clean stuff up if it's already running.
[util-vserver-pl.git] / python / vserver.py
index 081fd8a..aee6d03 100644 (file)
@@ -136,15 +136,15 @@ def adjust_lim(goal, curr):
     soft = curr[0]
     hard = curr[1]
     if gm != VC_LIM_KEEP:
-        if gm > soft:
+        if gm > soft or gm == resource.RLIM_INFINITY:
             soft = gm
-        if gm > hard:
+        if gm > hard or gm == resource.RLIM_INFINITY:
             hard = gm
     if gs != VC_LIM_KEEP:
-        if gs > soft:
+        if gs > soft or gs == resource.RLIM_INFINITY:
             soft = gs
     if gh != VC_LIM_KEEP:
-        if gh > hard:
+        if gh > hard or gh == resource.RLIM_INFINITY:
             hard = gh
     return (soft, hard)
 
@@ -201,9 +201,10 @@ class VServer:
             resource_type = RLIMITS[type]
             try:
                 vserverimpl.setrlimit(self.ctx, resource_type, hard, soft, min)
-                lim = resource.getrlimit(resource_type)
-                lim = adjust_lim((hard, soft, min), lim)
-                resource.setrlimit(resource_type, lim)
+                if hasattr(resource, 'RLIMIT_' + type):
+                    lim = resource.getrlimit(resource_type)
+                    lim = adjust_lim((hard, soft, min), lim)
+                    resource.setrlimit(resource_type, lim)
             except OSError, e:
                 self.log("Error: setrlimit(%d, %s, %d, %d, %d): %s"
                          % (self.ctx, type.lower(), hard, soft, min))
@@ -300,7 +301,7 @@ class VServer:
             try:
                 vserverimpl.unsetdlimit(self.dir, self.ctx)
             except OSError, e:
-                self.log("Unexpected error with unsetdlimit for context %d" % self.ctx)
+                self.log("Unexpected error with unsetdlimit for context %d: %r" % (self.ctx,e))
             return
 
         if self.vm_running:
@@ -320,7 +321,7 @@ class VServer:
                                   vserverimpl.DLIMIT_INF,  # inode limit
                                   2)   # %age reserved for root
         except OSError, e:
-            self.log("Unexpected error with setdlimit for context %d" % self.ctx)
+            self.log("Unexpected error with setdlimit for context %d: %r" % (self.ctx, e))
 
 
         self.config.update('dlimits/0/space_total', block_limit)
@@ -466,7 +467,7 @@ class VServer:
                 # open state file to record vserver info
                 state_file = open("/var/run/vservers/%s" % self.name, "w")
 
-                # use /dev/null for stdin, /var/log/boot.log for stdout/err
+                # use /dev/null for stdin, /var/log/nm for stdout/err
                 fd = os.open("/dev/null", os.O_RDONLY)
                 if fd != 0:
                     os.dup2(fd, 0)
@@ -477,9 +478,10 @@ class VServer:
 
                 self.config.cache_it()
                 self.__do_chroot()
-                removed = self.__cleanvar()
+                if not self.is_running():
+                    removed = self.__cleanvar()
 
-                log = open("/var/log/boot.log", "a", 0)
+                log = open("/var/log/nm", "a", 0)
                 if log.fileno() != 1:
                     os.dup2(log.fileno(), 1)
                 os.dup2(1, 2)
@@ -500,6 +502,8 @@ class VServer:
                         if os.path.isfile(cmd[0]):                         
                             print >>log, "executing '%s'" % " ".join(cmd_args)
                             os.spawnvp(os.P_NOWAIT,cmd[0],cmd_args)
+                        else:
+                            print >>log, "WARNING: could not run %s"%cmd[0]
                     except:
                         print >>log, traceback.format_exc()