- moved here from sysv/
[util-vserver.git] / sysv / vservers.subst
index bad0e49..acaced0 100755 (executable)
@@ -1,91 +1,92 @@
 #!/bin/sh
-# chkconfig: 345 98 10
+# chkconfig: 345 99 01
 # description: The vservers service is used to start and stop all
 #              the virtual servers.
 
 USR_SBIN=/usr/sbin
-
+VROOTDIR=/vservers
 
 # Print the vserver name in priority/alpha order
 sortserver(){
-       (
-       cd /etc/vservers
-       for serv in *.conf
-       do
-               test -f "$serv" || continue
-
-               PRIORITY=100
-               . $serv
-               printf "%03d %s\n" $PRIORITY `basename $serv .conf`
-       done
-       ) | sort $* | (while read a b; do echo $b; done)
+    (
+    cd /etc/vservers
+    for serv in *.conf ; do
+       # XXX - why is this check necessary?
+       test -f "$serv" || continue
+       PRIORITY=100
+       . $serv
+       echo $PRIORITY `basename $serv .conf`
+    done
+    ) | sort -n $* | cut -d ' ' -f 2
 }
 
 startservers(){
-       echo "Starting the virtual servers"
-       cd /etc/vservers
-       for name in `sortserver`
-       do
-               ONBOOT=
-               . $name.conf
-               if [ "$ONBOOT" = "yes" ] ; then
-                       $USR_SBIN/vserver $name start
-               else
-                       echo virtual server $name not configured for on boot start
-               fi
-       done
+    echo "Starting the virtual servers"
+    cd /etc/vservers
+    for name in $*; do
+       if ! test -f "$name.conf" ; then
+           echo No configuration for this vserver: /etc/vservers/$name.conf
+           continue
+       fi
+       ONBOOT=
+       BACKGROUND=no
+       if [ -f /etc/vservers.conf ] ; then
+           . /etc/vservers.conf
+       fi
+       . $name.conf
+       if [ "$ONBOOT" = "yes" ] ; then
+           mkdir -p $VROOTDIR/$name/var/log
+           if [ "$BACKGROUND" = "yes" ] ; then
+               nohup setsid $USR_SBIN/vserver $name start >$VROOTDIR/$name/var/log/boot.log 2>&1 </dev/null &
+               sleep 1
+           else
+               $USR_SBIN/vserver $name start 2>&1 </dev/null | tee $VROOTDIR/$name/var/log/boot.log
+           fi
+       fi
+    done
 }
 
-BACKGROUND=off
-if [ -f /etc/vservers.conf ] ; then
-       . /etc/vservers.conf
-fi
-
-
 # See how we were called.
 case "$1" in
   start)
-       if [ "$BACKGROUND" = "yes" ] ; then
-               startservers >/dev/tty8 </dev/tty8 2>/dev/tty8 &
+       # do nothing unless passed a vserver name - 'start all' functionality
+       # subsumed by Node Manager
+       if [ -z "$2" ]; then
+           touch /var/lock/subsys/vservers
        else
-               startservers
+           startservers $2
        fi
-       touch /var/lock/subsys/vservers
        ;;
   stop)
+       shift
        echo "Stopping the virtual servers"
        cd /etc/vservers
-       for name in `sortserver -r`
-       do
-               $USR_SBIN/vserver $name stop
+       for name in ${*:-`sortserver -r`} ; do
+           chcontext --ctx `id -u $name` /usr/lib/util-vserver/vserverkillall
+           umount $VROOTDIR/$name/proc
+           umount $VROOTDIR/$name/dev/pts
        done
        rm -f /var/lock/subsys/vservers
        ;;
-  restart)
-       $0 stop
-       $0 start
+  restart|force-reload)
+       shift
+       $0 stop $*
+       $0 start $*
        ;;
   reload)
        echo Not implemented
        ;;
   status)
        cd /etc/vservers
-       for serv in *.conf
-       do
-               ONBOOT=no
-               name=`basename $serv .conf`
-               . $serv
-               echo -n ONBOOT=$ONBOOT " "
-               $USR_SBIN/vserver $name running
+       for serv in *.conf ; do
+           ONBOOT=no
+           name=`basename $serv .conf`
+           . $serv
+           echo -n ONBOOT=$ONBOOT " "
+           $USR_SBIN/vserver $name running
        done
        ;;
   *)
        echo "Usage: vservers {start|stop|restart|reload|status}"
        exit 1
 esac
-
-exit 0
-
-
-
-