#!/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
-
-
-
-