New version 1.2.15
[sahlberg/ctdb.git] / config / ctdb.init
index 8721e31bfd3073054de78ccda376aa0120b018a0..25e158fcc5382abb6ce7f9266991f4854df45b51 100755 (executable)
@@ -39,6 +39,10 @@ unset TMPDIR
     export CTDB_BASE="/etc/ctdb"
 }
 
+[ -z "$CTDB_VARDIR" ] && {
+    export CTDB_VARDIR="/var/ctdb"
+}
+
 . $CTDB_BASE/functions
 loadconfig network
 loadconfig ctdb
@@ -164,6 +168,19 @@ set_retval() {
     return $1
 }
 
+wait_until_ready () {
+    _timeout="${1:-10}" # default is 10 seconds
+
+    _count=0
+    while ! ctdb ping >/dev/null 2>&1 ; do
+       if [ $_count -ge $_timeout ] ; then
+           return 1
+       fi
+       sleep 1
+       _count=$(($_count + 1))
+    done
+}
+
 ctdbd=${CTDBD:-/usr/sbin/ctdbd}
 
 start() {
@@ -171,7 +188,7 @@ start() {
 
     ctdb ping >/dev/null 2>&1 && {
        echo $"CTDB is already running"
-       return 1
+       return 0
     }
 
     build_ctdb_options
@@ -193,14 +210,11 @@ start() {
            ;;
        suse)
            eval startproc $ctdbd "$CTDB_OPTIONS"
-           rc_status -v
            RETVAL=$?
            ;;
        redhat)
            eval $ctdbd "$CTDB_OPTIONS"
            RETVAL=$?
-           [ $RETVAL -eq 0 ] && success || failure
-           echo
            [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ctdb || RETVAL=1
            ;;
        debian)
@@ -210,12 +224,28 @@ start() {
            ;;
     esac
 
-    sleep 1
+    if [ $RETVAL -eq 0 ] ; then
+       if wait_until_ready ; then
+           set_ctdb_variables
+       else
+           RETVAL=1
+           pkill -9 -f $ctdbd >/dev/null 2>&1
+       fi
+    fi
 
-    set_ctdb_variables
+    case $init_style in
+       suse)
+           set_retval $RETVAL
+           rc_status -v
+           ;;
+       redhat)
+           [ $RETVAL -eq 0 ] && success || failure
+           echo
+           ;;
+    esac
 
     return $RETVAL
-}      
+}
 
 stop() {
     echo -n $"Shutting down ctdbd service: "
@@ -262,7 +292,7 @@ stop() {
 restart() {
     stop
     start
-}      
+}
 
 status() {
     echo -n $"Checking for ctdbd service: "
@@ -275,7 +305,13 @@ status() {
                rc_status -v
                ;;
            redhat)
-               echo ""
+               if [ -f /var/lock/subsys/ctdb ]; then
+                       echo $"ctdb dead but subsys locked"
+                       RETVAL=2
+               else
+                       echo $"ctdb is stopped"
+                       RETVAL=3
+               fi
                ;;
        esac
        return $RETVAL
@@ -292,13 +328,13 @@ case "$1" in
     stop)
        stop
        ;;
-    restart|reload)
+    restart|reload|force-reload)
        restart
        ;;
     status)
        status
        ;;
-    condrestart)
+    condrestart|try-restart)
        ctdb status > /dev/null && restart || :
        ;;
     cron)
@@ -306,7 +342,7 @@ case "$1" in
        ctdb status > /dev/null || restart
        ;;
     *)
-       echo $"Usage: $0 {start|stop|restart|status|cron|condrestart}"
+       echo $"Usage: $0 {start|stop|restart|reload|force-reload|status|cron|condrestart|try-restart}"
        exit 1
 esac