Blob Blame History Raw
diff --git a/bin/hsqldb b/bin/hsqldb
index 8ee4c15..764b104 100755
--- a/bin/hsqldb
+++ b/bin/hsqldb
@@ -41,7 +41,7 @@
 # use this file.
 
 # This stuff will be ignored by systems that don't use chkconfig.
-# chkconfig: - 87 13
+# chkconfig: 345 87 13
 # description: Hsqldb, A High Performance Java Database
 # pidfile: /var/run/hsqldb.pid
 # config: /etc/sysconfig/hsqldb
@@ -51,6 +51,7 @@
 # Provides:          HSQLDB-Server
 # Required-Start:    $syslog $remote_fs $network $named
 # Required-Stop:
+# Default-Start:     3 5
 # Default-Stop:      0 1 2 6
 # Short-Description: HSQLDB-Server
 # Description:       Hsqldb, A High Performance Java Database Server
@@ -100,7 +101,7 @@ INVOC_PATH=`dirname "$0"` || {
 }
 [ -n "$INVOC_PATH" ] && INVOC_PATH="${INVOC_PATH}/"
 
-SYNTAX_MSG="SYNTAX:  ${INVOC_PATH}hsqldb start|stop|stopcompact|restart|restartcmpacted|status"
+SYNTAX_MSG="SYNTAX:  ${INVOC_PATH}hsqldb start|stop|stopcompact|restart|restartcmpacted|status|try-restart|force-reload"
 
 # You can override any of these default values in your config file:
 
@@ -178,7 +179,7 @@ done
 
 [ $# -eq 1 ] || {
     echo "$SYNTAX_MSG" 1>&2
-    exit 4
+    exit 2
 }
 
 # It would be nice to permit some uses, like "status" by non-root users,
@@ -208,11 +209,11 @@ COMMAND="$1"; shift
 
 [ -r "$CFGFILE" ] || {
     echo "Unable to read config file '$CFGFILE'" 1>&2
-    exit 2
+    exit 6
 }
 [ -f "$CFGFILE" ] || {
     echo "'$CFGFILE' is not a regular file" 1>&2
-    exit 2
+    exit 6
 }
 HSQLDB_OWNER=
 JAVA_EXECUTABLE=
@@ -228,15 +229,15 @@ SERVER_ADDL_CLASSPATH="${SERVER_ADDL_CLASSPATH}:"
 [ -n "$SERVER_HOME" ] || {
     echo "Config file '$CFGFILE' does not set one or more of following variables
     JAVA_EXECUTABLE, HSQLDB_JAR_PATH, SERVER_HOME" 1>&2
-    exit 2
+    exit 6
 }
 [ -d "$SERVER_HOME" ] || {
     echo "SERVER_HOME variable in '$CFGFILE' is set to a non-directory." 1>&2
-    exit 2
+    exit 6
 }
 [ -f "$JAVA_EXECUTABLE" ] && [ -f "$HSQLDB_JAR_PATH" ] || {
     echo "JAVA_EXECUTABLE or HSQLDB_JAR_PATH in '$CFGFILE' is set to a non-file." 1>&2
-    exit 2
+    exit 6
 }
 
 # PROPERTY_FILE is a derived value.
@@ -245,23 +246,23 @@ case "$TARGET_CLASS" in
     WebServer) PROPERTY_FILE="$SERVER_HOME"/webserver.properties;;
     *)
         echo 'Unsupported value for $TARGET_CLASS:  '"$TARGET_CLASS" 1>&2
-        exit 2;;
+        exit 6;;
 esac
 [ -f "$PROPERTY_FILE" ] || {
     echo "'$PROPERTY_FILE' is missing" 1>&2
-    exit 2
+    exit 6
 }
 [ -r "$PROPERTY_FILE" ] || {
     echo "'$PROPERTY_FILE' isn't readable" 1>&2
-    exit 2
+    exit 6
 }
 [ -r "$HSQLDB_JAR_PATH" ] || {
     echo "'$HSQLDB_JAR_PATH' isn't readable" 1>&2
-    exit 2
+    exit 6
 }
 [ -x "$JAVA_EXECUTABLE" ] || {
     echo "No Java executable found at '$JAVA_EXECUTABLE'" 1>&2
-    exit 2
+    exit 6
 }
 
 # "chown" lives here on some UNIXes.
@@ -278,15 +279,15 @@ else
     [ -n "${_AUTH_TEST_PATH}" ] || _AUTH_TEST_PATH="$HOME/sqltool.rc"
     [ -f "$_AUTH_TEST_PATH" ] || {
         echo "No auth file found at '$_AUTH_TEST_PATH'" 1>&2
-        exit 2
+        exit 6
     }
     [ -r "$_AUTH_TEST_PATH" ] || {
         echo "Auth file '$_AUTH_TEST_PATH' not readable" 1>&2
-        exit 2
+        exit 6
     }
     ls -ld "$_AUTH_TEST_PATH" | grep '^-..------' > /dev/null 2>&1 || {
         echo "Fix permissions on '$_AUTH_TEST_PATH' like 'chmod 600 $_AUTH_TEST_PATH'" 1>&2
-        exit 2
+        exit 6
     }
 fi
 
@@ -314,12 +315,20 @@ HSQLDB_PID=
         exit 6
     }
     kill -0 "$HSQLDB_PID" > /dev/null 2>&1 || {
-        echo 'Removing stale pid file'
-        rm -f "$PIDFILE" || {
-            echo "Failed to remove pid file '$PIDFILE'" 1>&2
-            exit 6
-        }
-        HSQLDB_PID=
+        case "$COMMAND" in
+            status)
+                echo 'Pid file is stale'
+                exit 2
+            ;;
+            *)
+                echo 'Removing stale pid file'
+                rm -f "$PIDFILE" || {
+                    echo "Failed to remove pid file '$PIDFILE'" 1>&2
+                    exit 6
+                }
+                HSQLDB_PID=
+            ;;
+        esac
     }
     #echo "PID is ($HSQLDB_PID)"
 }
@@ -328,7 +337,7 @@ case "$COMMAND" in
     status)
         [ -n "$HSQLDB_PID" ] || {
             echo "I don't know of any running hsqldb server."
-            exit 0
+            exit 3
         }
         echo "There is an hsqldb server loaded from $HSQLDB_JAR_PATH
 running with pid $HSQLDB_PID."
@@ -351,7 +360,7 @@ running with pid $HSQLDB_PID."
     start)
         [ -n "$HSQLDB_PID" ] && {
         echo "There is already a hsqldb server running with pid $HSQLDB_PID." 1>&2
-            exit 1
+            exit 0
         }
         TLS_SWITCHES=
         [ -n "$TLS_KEYSTORE" ] &&
@@ -436,7 +445,7 @@ See log file '$LOGFILE'." 1>&2
         [ "$COMMAND" = stopcompact ] && SHUTDOWN_OPTION='compact'
         [ -n "$HSQLDB_PID" ] || {
             echo "I don't know of any running hsqldb server." 1>&2
-            exit 1
+            exit 0
         }
         AUTH_FILE_SWITCH=
         # N.b., there will be a problem if there are special characters or
@@ -463,7 +472,15 @@ See log file '$LOGFILE'." 1>&2
         echo "Successful shutdown ${SHUTDOWN_OPTION} (for the $TARGET_CLASS process)!"
         exit 0
     ;;
-    restart|restartcompacted|reload)
+    try-restart)
+        [ -n "$HSQLDB_PID" ] || {
+            exit 0
+        }
+        STOP_COMMAND=stop
+        "${INVOC_PATH}"hsqldb $STOP_COMMAND || exit $?
+        exec "${INVOC_PATH}"/hsqldb start
+    ;;
+    restart|restartcompacted|force-reload)
         STOP_COMMAND=stop
         [ "$COMMAND" = restartcompacted ] && STOP_COMMAND=stopcompact
         "${INVOC_PATH}"hsqldb $STOP_COMMAND || exit $?
@@ -471,6 +488,6 @@ See log file '$LOGFILE'." 1>&2
     ;;
     *)
         echo "$SYNTAX_MSG" 1>&2
-        exit 5
+        exit 2
     ;;
 esac