- moved here from sysv/
[util-vserver.git] / sysv / vservers.subst
1 #!/bin/sh
2 # chkconfig: 345 99 01
3 # description: The vservers service is used to start and stop all
4 #              the virtual servers.
5
6 USR_SBIN=/usr/sbin
7 VROOTDIR=/vservers
8
9 # Print the vserver name in priority/alpha order
10 sortserver(){
11     (
12     cd /etc/vservers
13     for serv in *.conf ; do
14         # XXX - why is this check necessary?
15         test -f "$serv" || continue
16         PRIORITY=100
17         . $serv
18         echo $PRIORITY `basename $serv .conf`
19     done
20     ) | sort -n $* | cut -d ' ' -f 2
21 }
22
23 startservers(){
24     echo "Starting the virtual servers"
25     cd /etc/vservers
26     for name in $*; do
27         if ! test -f "$name.conf" ; then
28             echo No configuration for this vserver: /etc/vservers/$name.conf
29             continue
30         fi
31         ONBOOT=
32         BACKGROUND=no
33         if [ -f /etc/vservers.conf ] ; then
34             . /etc/vservers.conf
35         fi
36         . $name.conf
37         if [ "$ONBOOT" = "yes" ] ; then
38             mkdir -p $VROOTDIR/$name/var/log
39             if [ "$BACKGROUND" = "yes" ] ; then
40                 nohup setsid $USR_SBIN/vserver $name start >$VROOTDIR/$name/var/log/boot.log 2>&1 </dev/null &
41                 sleep 1
42             else
43                 $USR_SBIN/vserver $name start 2>&1 </dev/null | tee $VROOTDIR/$name/var/log/boot.log
44             fi
45         fi
46     done
47 }
48
49 # See how we were called.
50 case "$1" in
51   start)
52         # do nothing unless passed a vserver name - 'start all' functionality
53         # subsumed by Node Manager
54         if [ -z "$2" ]; then
55             touch /var/lock/subsys/vservers
56         else
57             startservers $2
58         fi
59         ;;
60   stop)
61         shift
62         echo "Stopping the virtual servers"
63         cd /etc/vservers
64         for name in ${*:-`sortserver -r`} ; do
65             chcontext --ctx `id -u $name` /usr/lib/util-vserver/vserverkillall
66             umount $VROOTDIR/$name/proc
67             umount $VROOTDIR/$name/dev/pts
68         done
69         rm -f /var/lock/subsys/vservers
70         ;;
71   restart|force-reload)
72         shift
73         $0 stop $*
74         $0 start $*
75         ;;
76   reload)
77         echo Not implemented
78         ;;
79   status)
80         cd /etc/vservers
81         for serv in *.conf ; do
82             ONBOOT=no
83             name=`basename $serv .conf`
84             . $serv
85             echo -n ONBOOT=$ONBOOT " "
86             $USR_SBIN/vserver $name running
87         done
88         ;;
89   *)
90         echo "Usage: vservers {start|stop|restart|reload|status}"
91         exit 1
92 esac