expect slice initscript to implement stop and restart
[nodemanager.git] / sliver-initscripts / vinit
index 9e0c9b7..003a872 100644 (file)
@@ -1,8 +1,5 @@
 #!/bin/bash
 #
-# $Id$
-# $URL$
-#
 # vinit - trigger the slice-local initscript as installed in /etc/rc.d/vinit.slice
 #
 # this is unconditionnally installed and activated in the sliver
@@ -12,10 +9,8 @@
 # as the slice has not yet started at that point
 #
 # historical note
-# historically planetlab initscripts have not been required to handle the 'stop' method
-# so installing such a script directly as /etc/rc.d/vinit would result in the
-# script .. being run a second time at vserver-stop time
-
+# historically planetlab initscripts were not required to handle the 'stop' and 'restart' method
+# as of March 2011 this becomes a requirement though
 
 # Source function library.
 . /etc/init.d/functions
@@ -29,26 +24,30 @@ lockfile=/var/lock/subsys/vinit
 
 RETVAL=0
 
-# xxx todo - redirect all stdout, stderr to /var/log/vinit for user access
-
 function start() {
-    if [ ! -x $slicescript ] ; then
-       echo "vinit@$slicename: no executable $slicescript - ignored"
-       return 0
-    fi
+    [ -x $slicescript ] || return 0
     echo $"Starting $prog" 
-    $slicescript start $slicename >& /var/log/vinit &
+    $slicescript start $slicename &>> /var/log/vinit &
     touch ${lockfile}
     return 0
 }
 
-# the initial model came without a stop function; legacy ...
 function stop() {
+    [ -x $slicescript ] && $slicescript stop $slicename &>> /var/log/vinit &
+    # safe side
+    sleep 5
     echo $"Stopping $prog "
     killproc $basename
     rm -f ${lockfile}
 }
 
+function restart () {
+    [ -x $slicescript ] || return 0
+    echo $"Restarting $prog"
+    $slicescript restart $slicename &>> /var/log/vinit &
+    return 0
+}
+
 function status () {
     if [ -f ${lockfile} ] ; then
        echo "$prog seems to have run"
@@ -68,12 +67,16 @@ case "$1" in
        stop
        RETVAL=$?
        ;;
+    restart)
+       restart
+       RETVAL=$?
+       ;;
     status)
        status 
        RETVAL=$?
        ;;
     *)
-       echo $"Usage: $0 {start|stop|status}"
+       echo $"Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
 esac