You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2021/01/20 04:47:15 UTC

[lucene-solr] branch reference_impl_dev updated: @1257 Update Jetty start/stop script.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/reference_impl_dev by this push:
     new 90724f2  @1257 Update Jetty start/stop script.
90724f2 is described below

commit 90724f2926edd248f779db75424e342e55152843
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Tue Jan 19 22:46:31 2021 -0600

    @1257 Update Jetty start/stop script.
---
 solr/bin/jetty.sh | 836 +++++++++++++++++++++++++-----------------------------
 solr/bin/solr     |   1 -
 2 files changed, 389 insertions(+), 448 deletions(-)

diff --git a/solr/bin/jetty.sh b/solr/bin/jetty.sh
index 0235891..0911318 100644
--- a/solr/bin/jetty.sh
+++ b/solr/bin/jetty.sh
@@ -1,36 +1,42 @@
-#!/bin/bash
+#!/usr/bin/env bash
+
+# LSB Tags
 ### BEGIN INIT INFO
 # Provides:          jetty
-# Required-Start:    $local_fs $remote_fs $network $syslog $named
-# Required-Stop:     $local_fs $remote_fs $network $syslog $named
+# Required-Start:    $local_fs $network
+# Required-Stop:     $local_fs $network
 # Default-Start:     2 3 4 5
 # Default-Stop:      0 1 6
-# X-Interactive:     true
-# Short-Description: Start/stop jetty servlet container
+# Short-Description: Jetty start script.
+# Description:       Start Jetty web server.
 ### END INIT INFO
 
-
-#
 # Startup script for jetty under *nix systems (it works under NT/cygwin too).
 
+##################################################
+# Set the name which is used by other variables.
+# Defaults to the file name without extension.
+##################################################
+NAME=$(echo $(basename $0) | sed -e 's/^[SK][0-9]*//' -e 's/\.sh$//')
+
 # To get the service to restart correctly on reboot, uncomment below (3 lines):
 # ========================
 # chkconfig: 3 99 99
-# description: Jetty 6 webserver
+# description: Jetty 9 webserver
 # processname: jetty
 # ========================
 
 # Configuration files
 #
-# /etc/default/jetty
+# /etc/default/$NAME
 #   If it exists, this is read at the start of script. It may perform any
 #   sequence of shell commands, like setting relevant environment variables.
 #
-# $HOME/.jettyrc
+# $HOME/.$NAMErc (e.g. $HOME/.jettyrc)
 #   If it exists, this is read at the start of script. It may perform any
 #   sequence of shell commands, like setting relevant environment variables.
 #
-# /etc/jetty.conf
+# /etc/$NAME.conf
 #   If found, and no configurations were given on the command line,
 #   the file will be used as this script's configuration.
 #   Each line in the file may contain:
@@ -39,67 +45,58 @@
 #       config.xml file.
 #     - The path to a directory. Each *.xml file in the directory will be
 #       passed to jetty as a config.xml file.
+#     - All other lines will be passed, as-is to the start.jar
 #
 #   The files will be checked for existence before being passed to jetty.
 #
-# $JETTY_HOME/etc/jetty.xml
-#   If found, used as this script's configuration file, but only if
-#   /etc/jetty.conf was not present. See above.
-#
 # Configuration variables
 #
-# JAVA_HOME
-#   Home of Java installation.
-#
 # JAVA
-#   Command to invoke Java. If not set, $JAVA_HOME/bin/java will be
-#   used.
+#   Command to invoke Java. If not set, java (from the PATH) will be used.
 #
 # JAVA_OPTIONS
 #   Extra options to pass to the JVM
 #
 # JETTY_HOME
 #   Where Jetty is installed. If not set, the script will try go
-#   guess it by first looking at the invocation path for the script,
-#   and then by looking in standard locations as $HOME/opt/jetty
-#   and /opt/jetty. The java system property "jetty.home" will be
+#   guess it by looking at the invocation path for the script
+#   The java system property "jetty.home" will be
 #   set to this value for use by configure.xml files, f.e.:
 #
-#    <Arg><SystemProperty name="jetty.home" default="."/>/webapps/jetty.war</Arg>
-#
-# JETTY_PORT
-#   Override the default port for Jetty servers. If not set then the
-#   default value in the xml configuration file will be used. The java
-#   system property "jetty.port" will be set to this value for use in
-#   configure.xml files. For example, the following idiom is widely
-#   used in the demo config files to respect this property in Listener
-#   configuration elements:
-#
-#    <Set name="Port"><SystemProperty name="jetty.port" default="8080"/></Set>
-#
-#   Note: that the config file could ignore this property simply by saying:
+#    <Arg><Property name="jetty.home" default="."/>/webapps/jetty.war</Arg>
 #
-#    <Set name="Port">8080</Set>
+# JETTY_BASE
+#   Where your Jetty base directory is.  If not set, the value from
+#   $JETTY_HOME will be used.
 #
 # JETTY_RUN
-#   Where the jetty.pid file should be stored. It defaults to the
-#   first available of /var/run, /usr/var/run, and /tmp if not set.
+#   Where the $NAME.pid file should be stored. It defaults to the
+#   first available of /var/run, /usr/var/run, JETTY_BASE and /tmp
+#   if not set.
 #
 # JETTY_PID
-#   The Jetty PID file, defaults to $JETTY_RUN/jetty.pid
+#   The Jetty PID file, defaults to $JETTY_RUN/$NAME.pid
 #
 # JETTY_ARGS
 #   The default arguments to pass to jetty.
+#   For example
+#      JETTY_ARGS=jetty.http.port=8080 jetty.ssl.port=8443
 #
 # JETTY_USER
 #   if set, then used as a username to run the server as
 #
-# Set to 0 if you do not want to use start-stop-daemon (especially on SUSE boxes)
-START_STOP_DAEMON=0
+# JETTY_SHELL
+#   If set, then used as the shell by su when starting the server.  Will have
+#   no effect if start-stop-daemon exists.  Useful when JETTY_USER does not
+#   have shell access, e.g. /bin/false
+#
+# JETTY_START_TIMEOUT
+#   Time spent waiting to see if startup was successful/failed. Defaults to 60 seconds
+#
 
 usage()
 {
-    echo "Usage: $0 {start|stop|run|restart|check|supervise} [ CONFIGS ... ] "
+    echo "Usage: ${0##*/} [-d] {start|stop|run|restart|check|supervise} [ CONFIGS ... ] "
     exit 1
 }
 
@@ -111,70 +108,113 @@ usage()
 ##################################################
 findDirectory()
 {
-    OP=$1
-    shift
-    for L in $* ; do
-        [ $OP $L ] || continue
-        echo $L
-        break
-    done
+  local L OP=$1
+  shift
+  for L in "$@"; do
+    [ "$OP" "$L" ] || continue
+    printf %s "$L"
+    break
+  done
 }
 
 running()
 {
-    [ -f $1 ] || return 1
-    PID=$(cat $1)
-    ps -p $PID >/dev/null 2>/dev/null || return 1
-    return 0
+  if [ -f "$1" ]
+  then
+    local PID=$(cat "$1" 2>/dev/null) || return 1
+    kill -0 "$PID" 2>/dev/null
+    return
+  fi
+  rm -f "$1"
+  return 1
 }
 
+started()
+{
+  # wait for 60s to see "STARTED" in PID file, needs jetty-started.xml as argument
+  for ((T = 0; T < $(($3 / 4)); T++))
+  do
+    sleep 4
+    [ -z "$(grep STARTED $1 2>/dev/null)" ] || return 0
+    [ -z "$(grep STOPPED $1 2>/dev/null)" ] || return 1
+    [ -z "$(grep FAILED $1 2>/dev/null)" ] || return 1
+    local PID=$(cat "$2" 2>/dev/null) || return 1
+    kill -0 "$PID" 2>/dev/null || return 1
+    echo -n ". "
+  done
 
+  return 1;
+}
 
 
+readConfig()
+{
+  (( DEBUG )) && echo "Reading $1.."
+  source "$1"
+}
+
+dumpEnv()
+{
+    echo "JAVA                  =  $JAVA"
+    echo "JAVA_OPTIONS          =  ${JAVA_OPTIONS[*]}"
+    echo "JETTY_HOME            =  $JETTY_HOME"
+    echo "JETTY_BASE            =  $JETTY_BASE"
+    echo "START_D               =  $START_D"
+    echo "START_INI             =  $START_INI"
+    echo "JETTY_START           =  $JETTY_START"
+    echo "JETTY_CONF            =  $JETTY_CONF"
+    echo "JETTY_ARGS            =  ${JETTY_ARGS[*]}"
+    echo "JETTY_RUN             =  $JETTY_RUN"
+    echo "JETTY_PID             =  $JETTY_PID"
+    echo "JETTY_START_LOG       =  $JETTY_START_LOG"
+    echo "JETTY_STATE           =  $JETTY_STATE"
+    echo "JETTY_START_TIMEOUT   =  $JETTY_START_TIMEOUT"
+    echo "RUN_CMD               =  ${RUN_CMD[*]}"
+}
 
 
 
 ##################################################
 # Get the action & configs
 ##################################################
-
+CONFIGS=()
+NO_START=0
+DEBUG=0
+
+while [[ $1 = -* ]]; do
+  case $1 in
+    -d) DEBUG=1 ;;
+  esac
+  shift
+done
 ACTION=$1
 shift
-ARGS="$*"
-CONFIGS=""
-NO_START=0
 
 ##################################################
-# See if there's a default configuration file
+# Read any configuration files
 ##################################################
-if [ -f /etc/default/jetty6 ] ; then
-  . /etc/default/jetty6
-elif [ -f /etc/default/jetty ] ; then
-  . /etc/default/jetty
+ETC=/etc
+if [ $UID != 0 ]
+then
+  ETC=$HOME/etc
 fi
 
+for CONFIG in {/etc,~/etc}/default/${NAME}{,9} $HOME/.${NAME}rc; do
+  if [ -f "$CONFIG" ] ; then
+    readConfig "$CONFIG"
+  fi
+done
 
-##################################################
-# See if there's a user-specific configuration file
-##################################################
-if [ -f $HOME/.jettyrc ] ; then
-  . $HOME/.jettyrc
-fi
 
 ##################################################
 # Set tmp if not already set.
 ##################################################
-
-if [ -z "$TMP" ]
-then
-  TMP=/tmp
-fi
+TMPDIR=${TMPDIR:-/tmp}
 
 ##################################################
 # Jetty's hallmark
 ##################################################
-JETTY_INSTALL_TRACE_FILE="etc/jetty.xml"
-TMPJ=$TMP/j$$
+JETTY_INSTALL_TRACE_FILE="start.jar"
 
 
 ##################################################
@@ -182,114 +222,56 @@ TMPJ=$TMP/j$$
 ##################################################
 if [ -z "$JETTY_HOME" ]
 then
-  JETTY_HOME_1=`dirname "$0"`
-  JETTY_HOME_1=`dirname "$JETTY_HOME_1"`
-  if [ -f "${JETTY_HOME_1}/${JETTY_INSTALL_TRACE_FILE}" ] ;
+  JETTY_SH=$0
+  case "$JETTY_SH" in
+    /*)     JETTY_HOME=${JETTY_SH%/*/*} ;;
+    ./*/*)  JETTY_HOME=${JETTY_SH%/*/*} ;;
+    ./*)    JETTY_HOME=.. ;;
+    */*/*)  JETTY_HOME=./${JETTY_SH%/*/*} ;;
+    */*)    JETTY_HOME=. ;;
+    *)      JETTY_HOME=.. ;;
+  esac
+
+  if [ ! -f "$JETTY_HOME/$JETTY_INSTALL_TRACE_FILE" ]
   then
-     JETTY_HOME=${JETTY_HOME_1}
+    JETTY_HOME=
   fi
 fi
 
 
 ##################################################
-# if no JETTY_HOME, search likely locations.
+# No JETTY_HOME yet? We're out of luck!
 ##################################################
-if [ "$JETTY_HOME" = "" ] ; then
-  STANDARD_LOCATIONS="           \
-        /usr/share               \
-        /usr/share/java          \
-        $HOME                    \
-        $HOME/src                \
-        ${HOME}/opt/             \
-        /opt                     \
-        /java                    \
-        /usr/local               \
-        /usr/local/share         \
-        /usr/local/share/java    \
-        /home                    \
-        "
-  JETTY_DIR_NAMES="              \
-        jetty-6                  \
-        jetty6                   \
-        jetty-6.*                \
-        jetty                    \
-        Jetty-6                  \
-        Jetty6                   \
-        Jetty-6.*                \
-        Jetty                    \
-        "
-
-  JETTY_HOME=
-  for L in $STANDARD_LOCATIONS
-  do
-     for N in $JETTY_DIR_NAMES
-     do
-         if [ -d $L/$N ] && [ -f "$L/${N}/${JETTY_INSTALL_TRACE_FILE}" ] ;
-         then
-            JETTY_HOME="$L/$N"
-         fi
-     done
-     [ ! -z "$JETTY_HOME" ] && break
-  done
+if [ -z "$JETTY_HOME" ]; then
+  echo "** ERROR: JETTY_HOME not set, you need to set it or install in a standard location"
+  exit 1
 fi
 
+cd "$JETTY_HOME"
+JETTY_HOME=$PWD
+
 
 ##################################################
-# No JETTY_HOME yet? We're out of luck!
+# Set JETTY_BASE
 ##################################################
-if [ -z "$JETTY_HOME" ] ; then
-    echo "** ERROR: JETTY_HOME not set, you need to set it or install in a standard location"
-    exit 1
+if [ -z "$JETTY_BASE" ]; then
+  JETTY_BASE=$JETTY_HOME
 fi
 
-cd $JETTY_HOME
-JETTY_HOME=`pwd`
+cd "$JETTY_BASE"
+JETTY_BASE=$PWD
 
 
 #####################################################
 # Check that jetty is where we think it is
 #####################################################
-if [ ! -r $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE ]
+if [ ! -r "$JETTY_HOME/$JETTY_INSTALL_TRACE_FILE" ]
 then
-   echo "** ERROR: Oops! Jetty doesn't appear to be installed in $JETTY_HOME"
-   echo "** ERROR:  $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE is not readable!"
-   exit 1
+  echo "** ERROR: Oops! Jetty doesn't appear to be installed in $JETTY_HOME"
+  echo "** ERROR:  $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE is not readable!"
+  exit 1
 fi
 
-
-###########################################################
-# Get the list of config.xml files from the command line.
-###########################################################
-if [ ! -z "$ARGS" ]
-then
-  for A in $ARGS
-  do
-    if [ -f $A ]
-    then
-       CONF="$A"
-    elif [ -f $JETTY_HOME/etc/$A ]
-    then
-       CONF="$JETTY_HOME/etc/$A"
-    elif [ -f ${A}.xml ]
-    then
-       CONF="${A}.xml"
-    elif [ -f $JETTY_HOME/etc/${A}.xml ]
-    then
-       CONF="$JETTY_HOME/etc/${A}.xml"
-    else
-       echo "** ERROR: Cannot find configuration '$A' specified in the command line."
-       exit 1
-    fi
-    if [ ! -r $CONF ]
-    then
-       echo "** ERROR: Cannot read configuration '$A' specified in the command line."
-       exit 1
-    fi
-    CONFIGS="$CONFIGS $CONF"
-  done
-fi
-
-
 ##################################################
 # Try to find this script's configuration file,
 # but only if no configurations were given on the
@@ -297,172 +279,115 @@ fi
 ##################################################
 if [ -z "$JETTY_CONF" ]
 then
-  if [ -f /etc/jetty.conf ]
+  if [ -f $ETC/${NAME}.conf ]
+  then
+    JETTY_CONF=$ETC/${NAME}.conf
+  elif [ -f "$JETTY_BASE/etc/jetty.conf" ]
   then
-     JETTY_CONF=/etc/jetty.conf
-  elif [ -f "${JETTY_HOME}/etc/jetty.conf" ]
+    JETTY_CONF=$JETTY_BASE/etc/jetty.conf
+  elif [ -f "$JETTY_HOME/etc/jetty.conf" ]
   then
-     JETTY_CONF="${JETTY_HOME}/etc/jetty.conf"
+    JETTY_CONF=$JETTY_HOME/etc/jetty.conf
   fi
 fi
 
-##################################################
-# Read the configuration file if one exists
-##################################################
-CONFIG_LINES=
-if [ -z "$CONFIGS" ] && [ -f "$JETTY_CONF" ] && [ -r "$JETTY_CONF" ]
-then
-  CONFIG_LINES=`cat $JETTY_CONF | grep -v "^[:space:]*#" | tr "\n" " "`
-fi
-
-##################################################
-# Get the list of config.xml files from jetty.conf
-##################################################
-if [ ! -z "${CONFIG_LINES}" ]
+#####################################################
+# Find a location for the pid file
+#####################################################
+if [ -z "$JETTY_RUN" ]
 then
-  for CONF in ${CONFIG_LINES}
-  do
-    if [ ! -r "$CONF" ]
-    then
-      echo "** WARNING: Cannot read '$CONF' specified in '$JETTY_CONF'"
-    elif [ -f "$CONF" ]
-    then
-      # assume it's a configure.xml file
-      CONFIGS="$CONFIGS $CONF"
-    elif [ -d "$CONF" ]
-    then
-      # assume it's a directory with configure.xml files
-      # for example: /etc/jetty.d/
-      # sort the files before adding them to the list of CONFIGS
-      XML_FILES=`ls ${CONF}/*.xml | sort | tr "\n" " "`
-      for FILE in ${XML_FILES}
-      do
-         if [ -r "$FILE" ] && [ -f "$FILE" ]
-         then
-            CONFIGS="$CONFIGS $FILE"
-         else
-           echo "** WARNING: Cannot read '$FILE' specified in '$JETTY_CONF'"
-         fi
-      done
-    else
-      echo "** WARNING: Don''t know what to do with '$CONF' specified in '$JETTY_CONF'"
-    fi
-  done
+  JETTY_RUN=$(findDirectory -w /var/run /usr/var/run $JETTY_BASE /tmp)/jetty
+  [ -d "$JETTY_RUN" ] || mkdir $JETTY_RUN
 fi
 
 #####################################################
-# Run the standard server if there's nothing else to run
+# define start log location
 #####################################################
-if [ -z "$CONFIGS" ]
+if [ -z "$JETTY_START_LOG" ]
 then
-    CONFIGS=""
+  JETTY_START_LOG="$JETTY_RUN/$NAME-start.log"
 fi
 
-
 #####################################################
-# Find a location for the pid file
+# Find a pid and state file
 #####################################################
-if [  -z "$JETTY_RUN" ]
+if [ -z "$JETTY_PID" ]
 then
-  JETTY_RUN=`findDirectory -w /var/run /usr/var/run /tmp`
+  JETTY_PID="$JETTY_RUN/${NAME}.pid"
 fi
 
-#####################################################
-# Find a PID for the pid file
-#####################################################
-if [  -z "$JETTY_PID" ]
+if [ -z "$JETTY_STATE" ]
 then
-  JETTY_PID="$JETTY_RUN/jetty.pid"
+  JETTY_STATE=$JETTY_BASE/${NAME}.state
 fi
 
+case "`uname`" in
+CYGWIN*) JETTY_STATE="`cygpath -w $JETTY_STATE`";;
+esac
+
+
+JETTY_ARGS=(${JETTY_ARGS[*]} "jetty.state=$JETTY_STATE")
 
 ##################################################
-# Check for JAVA_HOME
+# Get the list of config.xml files from jetty.conf
 ##################################################
-if [ -z "$JAVA_HOME" ]
+if [ -f "$JETTY_CONF" ] && [ -r "$JETTY_CONF" ]
 then
-    # If a java runtime is not defined, search the following
-    # directories for a JVM and sort by version. Use the highest
-    # version number.
-
-    # Java search path
-    JAVA_LOCATIONS="\
-        /usr/java \
-        /usr/bin \
-        /usr/local/bin \
-        /usr/local/java \
-        /usr/local/jdk \
-        /usr/local/jre \
-	/usr/lib/jvm \
-        /opt/java \
-        /opt/jdk \
-        /opt/jre \
-    "
-    JAVA_NAMES="java jdk jre"
-    for N in $JAVA_NAMES ; do
-        for L in $JAVA_LOCATIONS ; do
-            [ -d $L ] || continue
-            find $L -name "$N" ! -type d | grep -v threads | while read J ; do
-                [ -x $J ] || continue
-                VERSION=`eval $J -version 2>&1`
-                [ $? = 0 ] || continue
-                VERSION=`expr "$VERSION" : '.*"\(1.[0-9\.]*\)["_]'`
-                [ "$VERSION" = "" ] && continue
-                expr $VERSION \< 1.2 >/dev/null && continue
-                echo $VERSION:$J
-            done
-        done
-    done | sort | tail -1 > $TMPJ
-    JAVA=`cat $TMPJ | cut -d: -f2`
-    JVERSION=`cat $TMPJ | cut -d: -f1`
-
-    JAVA_HOME=`dirname $JAVA`
-    while [ ! -z "$JAVA_HOME" -a "$JAVA_HOME" != "/" -a ! -f "$JAVA_HOME/lib/tools.jar" ] ; do
-        JAVA_HOME=`dirname $JAVA_HOME`
-    done
-    [ "$JAVA_HOME" = "" ] && JAVA_HOME=
-
-    echo "Found JAVA=$JAVA in JAVA_HOME=$JAVA_HOME"
-fi
+  while read -r CONF
+  do
+    if expr "$CONF" : '#' >/dev/null ; then
+      continue
+    fi
 
+    if [ -d "$CONF" ]
+    then
+      # assume it's a directory with configure.xml files
+      # for example: /etc/jetty.d/
+      # sort the files before adding them to the list of JETTY_ARGS
+      for XMLFILE in "$CONF/"*.xml
+      do
+        if [ -r "$XMLFILE" ] && [ -f "$XMLFILE" ]
+        then
+          JETTY_ARGS=(${JETTY_ARGS[*]} "$XMLFILE")
+        else
+          echo "** WARNING: Cannot read '$XMLFILE' specified in '$JETTY_CONF'"
+        fi
+      done
+    else
+      # assume it's a command line parameter (let start.jar deal with its validity)
+      JETTY_ARGS=(${JETTY_ARGS[*]} "$CONF")
+    fi
+  done < "$JETTY_CONF"
+fi
 
 ##################################################
-# Determine which JVM of version >1.2
-# Try to use JAVA_HOME
+# Setup JAVA if unset
 ##################################################
-if [ "$JAVA" = "" -a "$JAVA_HOME" != "" ]
+if [ -z "$JAVA" ]
 then
-  if [ ! -z "$JAVACMD" ]
-  then
-     JAVA="$JAVACMD"
-  else
-    [ -x $JAVA_HOME/bin/jre -a ! -d $JAVA_HOME/bin/jre ] && JAVA=$JAVA_HOME/bin/jre
-    [ -x $JAVA_HOME/bin/java -a ! -d $JAVA_HOME/bin/java ] && JAVA=$JAVA_HOME/bin/java
-  fi
+  JAVA=$(which java)
 fi
 
-if [ "$JAVA" = "" ]
+if [ -z "$JAVA" ]
 then
-    echo "Cannot find a JRE or JDK. Please set JAVA_HOME to a >=1.2 JRE" 2>&2
-    exit 1
+  echo "Cannot find a Java JDK. Please set either set JAVA or put java (>=1.5) in your PATH." >&2
+  exit 1
 fi
 
-JAVA_VERSION=`expr "$($JAVA -version 2>&1 | head -1)" : '.*1\.\([0-9]\)'`
-
 #####################################################
-# See if JETTY_PORT is defined
+# See if Deprecated JETTY_LOGS is defined
 #####################################################
-if [ "$JETTY_PORT" != "" ]
+if [ "$JETTY_LOGS" ]
 then
-  JAVA_OPTIONS="$JAVA_OPTIONS -Djetty.port=$JETTY_PORT"
+  echo "** WARNING: JETTY_LOGS is Deprecated. Please configure logging within the jetty base." >&2
 fi
 
 #####################################################
-# See if JETTY_LOGS is defined
+# Set STARTED timeout
 #####################################################
-if [ "$JETTY_LOGS" != "" ]
+if [ -z "$JETTY_START_TIMEOUT" ]
 then
-  JAVA_OPTIONS="$JAVA_OPTIONS -Djetty.logs=$JETTY_LOGS"
+  JETTY_START_TIMEOUT=60
 fi
 
 #####################################################
@@ -477,200 +402,217 @@ esac
 #####################################################
 # Add jetty properties to Java VM options.
 #####################################################
-JAVA_OPTIONS="$JAVA_OPTIONS -Djetty.home=$JETTY_HOME -Djava.io.tmpdir=$TMP"
 
-[ -f $JETTY_HOME/etc/start.config ] && JAVA_OPTIONS="-DSTART=$JETTY_HOME/etc/start.config $JAVA_OPTIONS"
+case "`uname`" in
+CYGWIN*)
+JETTY_HOME="`cygpath -w $JETTY_HOME`"
+JETTY_BASE="`cygpath -w $JETTY_BASE`"
+TMPDIR="`cygpath -w $TMPDIR`"
+;;
+esac
+
+JAVA_OPTIONS=(${JAVA_OPTIONS[*]} "-Djetty.home=$JETTY_HOME" "-Djetty.base=$JETTY_BASE" "-Djava.io.tmpdir=$TMPDIR")
 
 #####################################################
 # This is how the Jetty server will be started
 #####################################################
 
 JETTY_START=$JETTY_HOME/start.jar
-[ ! -f $JETTY_START ] && JETTY_START=$JETTY_HOME/lib/start.jar
+START_INI=$JETTY_BASE/start.ini
+START_D=$JETTY_BASE/start.d
+if [ ! -f "$START_INI" -a ! -d "$START_D" ]
+then
+  echo "Cannot find a start.ini file or a start.d directory in your JETTY_BASE directory: $JETTY_BASE" >&2
+  exit 1
+fi
+
+case "`uname`" in
+CYGWIN*) JETTY_START="`cygpath -w $JETTY_START`";;
+esac
 
-RUN_ARGS="$JAVA_OPTIONS -jar $JETTY_START $JETTY_ARGS $CONFIGS"
-RUN_CMD="$JAVA $RUN_ARGS"
+RUN_ARGS=(${JAVA_OPTIONS[@]} -jar "$JETTY_START" ${JETTY_ARGS[*]})
+RUN_CMD=("$JAVA" ${RUN_ARGS[@]})
 
 #####################################################
 # Comment these out after you're happy with what
 # the script is doing.
 #####################################################
-echo "JETTY_HOME     =  $JETTY_HOME"
-echo "JETTY_CONF     =  $JETTY_CONF"
-echo "JETTY_RUN      =  $JETTY_RUN"
-echo "JETTY_PID      =  $JETTY_PID"
-echo "JETTY_ARGS     =  $JETTY_ARGS"
-echo "CONFIGS        =  $CONFIGS"
-echo "JAVA_OPTIONS   =  $JAVA_OPTIONS"
-echo "JAVA           =  $JAVA"
-
+if (( DEBUG ))
+then
+  dumpEnv
+fi
 
 ##################################################
 # Do the action
 ##################################################
 case "$ACTION" in
   start)
-        echo -n "Starting Jetty: "
-
-        if [ "$NO_START" = "1" ]; then
-	  echo "Not starting jetty - NO_START=1 in /etc/default/jetty6";
-          exit 0;
-	fi
-
-
-	if [ "$START_STOP_DAEMON" = "1" ] && type start-stop-daemon
-	then
-          [ x$JETTY_USER = x ] && JETTY_USER=$(whoami)
-	  [ $UID = 0 ] && CH_USER="-c $JETTY_USER"
-	  if start-stop-daemon -S -p$JETTY_PID $CH_USER -d $JETTY_HOME -b -m -a $JAVA -- $RUN_ARGS
-	  then
-	      sleep 1
-	      if running $JETTY_PID
-	      then
-                  echo OK
-              else
-                  echo FAILED
-              fi
-	  fi
-
-	else
-
-          if [ -f $JETTY_PID ]
-          then
-            if running $JETTY_PID
-            then
-              echo "Already Running!!"
-              exit 1
-            else
-              # dead pid file - remove
-              rm -f $JETTY_PID
-            fi
-          fi
-
-          if [ x$JETTY_USER != x ]
-          then
-              touch $JETTY_PID
-              chown $JETTY_USER $JETTY_PID
-              su - $JETTY_USER -c "
-                $RUN_CMD &
-                PID=\$!
-                disown \$PID
-                echo \$PID > $JETTY_PID"
-          else
-              $RUN_CMD &
-              PID=$!
-              disown $PID
-              echo $PID > $JETTY_PID
-          fi
-
-          echo "STARTED Jetty `date`"
+    echo -n "Starting Jetty: "
+
+    if (( NO_START )); then
+      echo "Not starting ${NAME} - NO_START=1";
+      exit
+    fi
+
+    if [ $UID -eq 0 ] && type start-stop-daemon > /dev/null 2>&1
+    then
+      unset CH_USER
+      if [ -n "$JETTY_USER" ]
+      then
+        CH_USER="-c$JETTY_USER"
+      fi
+
+      start-stop-daemon -S -p"$JETTY_PID" $CH_USER -d"$JETTY_BASE" -b -m -a "$JAVA" -- "${RUN_ARGS[@]}" start-log-file="$JETTY_START_LOG"
+
+    else
+
+      if running $JETTY_PID
+      then
+        echo "Already Running $(cat $JETTY_PID)!"
+        exit 1
+      fi
+
+      if [ -n "$JETTY_USER" ] && [ `whoami` != "$JETTY_USER" ]
+      then
+        unset SU_SHELL
+        if [ "$JETTY_SHELL" ]
+        then
+          SU_SHELL="-s $JETTY_SHELL"
         fi
 
-        ;;
+        touch "$JETTY_PID"
+        chown "$JETTY_USER" "$JETTY_PID"
+        # FIXME: Broken solution: wordsplitting, pathname expansion, arbitrary command execution, etc.
+        su - "$JETTY_USER" $SU_SHELL -c "
+          cd \"$JETTY_BASE\"
+          exec ${RUN_CMD[*]} start-log-file=\"$JETTY_START_LOG\" > /dev/null &
+          disown \$!
+          echo \$! > \"$JETTY_PID\""
+      else
+        "${RUN_CMD[@]}" > /dev/null &
+        disown $!
+        echo $! > "$JETTY_PID"
+      fi
+
+    fi
+
+    if expr "${JETTY_ARGS[*]}" : '.*jetty-started.xml.*' >/dev/null
+    then
+      if started "$JETTY_STATE" "$JETTY_PID" "$JETTY_START_TIMEOUT"
+      then
+        echo "OK `date`"
+      else
+        echo "FAILED `date`"
+        exit 1
+      fi
+    else
+      echo "ok `date`"
+    fi
+
+    ;;
 
   stop)
-        echo -n "Stopping Jetty: "
-	if [ "$START_STOP_DAEMON" = "1" ] && type start-stop-daemon > /dev/null 2>&1; then
-	  start-stop-daemon -K -p $JETTY_PID -d $JETTY_HOME -a $JAVA -s HUP
-	  sleep 1
-	  if running $JETTY_PID
-	  then
-	      sleep 3
-	      if running $JETTY_PID
-	      then
-		  sleep 30
-	          if running $JETTY_PID
-	          then
-	             start-stop-daemon -K -p $JETTY_PID -d $JETTY_HOME -a $JAVA -s KILL
-		  fi
-              fi
-	  fi
-
-	  rm -f $JETTY_PID
-          echo OK
-	else
-	  PID=`cat $JETTY_PID 2>/dev/null`
-          TIMEOUT=30
-          while running $JETTY_PID && [ $TIMEOUT -gt 0 ]
-          do
-            kill $PID 2>/dev/null
-            sleep 1
-            let TIMEOUT=$TIMEOUT-1
-          done
-
-          [ $TIMEOUT -gt 0 ] || kill -9 $PID 2>/dev/null
-
-	  rm -f $JETTY_PID
-          echo OK
-	fi
-        ;;
+    echo -n "Stopping Jetty: "
+    if [ $UID -eq 0 ] && type start-stop-daemon > /dev/null 2>&1; then
+      start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s HUP
+
+      TIMEOUT=30
+      while running "$JETTY_PID"; do
+        if (( TIMEOUT-- == 0 )); then
+          start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s KILL
+        fi
 
-  restart)
-        JETTY_SH=$0
-        if [ ! -f $JETTY_SH ]; then
-          if [ ! -f $JETTY_HOME/bin/jetty.sh ]; then
-            echo "$JETTY_HOME/bin/jetty.sh does not exist."
-            exit 1
-          fi
-          JETTY_SH=$JETTY_HOME/bin/jetty.sh
+        sleep 1
+      done
+    else
+      if [ ! -f "$JETTY_PID" ] ; then
+        echo "ERROR: no pid found at $JETTY_PID"
+        exit 1
+      fi
+
+      PID=$(cat "$JETTY_PID" 2>/dev/null)
+      if [ -z "$PID" ] ; then
+        echo "ERROR: no pid id found in $JETTY_PID"
+        exit 1
+      fi
+      kill "$PID" 2>/dev/null
+
+      TIMEOUT=30
+      while running $JETTY_PID; do
+        if (( TIMEOUT-- == 0 )); then
+          kill -KILL "$PID" 2>/dev/null
         fi
-        $JETTY_SH stop $*
-        sleep 5
-        $JETTY_SH start $*
-        ;;
+
+        sleep 1
+      done
+    fi
+
+    rm -f "$JETTY_PID"
+    rm -f "$JETTY_STATE"
+    echo OK
+
+    ;;
+
+  restart)
+    JETTY_SH=$0
+    > "$JETTY_STATE"
+    if [ ! -f $JETTY_SH ]; then
+      if [ ! -f $JETTY_HOME/bin/jetty.sh ]; then
+        echo "$JETTY_HOME/bin/jetty.sh does not exist."
+        exit 1
+      fi
+      JETTY_SH=$JETTY_HOME/bin/jetty.sh
+    fi
+
+    "$JETTY_SH" stop "$@"
+    "$JETTY_SH" start "$@"
+
+    ;;
 
   supervise)
-       #
-       # Under control of daemontools supervise monitor which
-       # handles restarts and shutdowns via the svc program.
-       #
-         exec $RUN_CMD
-         ;;
+    #
+    # Under control of daemontools supervise monitor which
+    # handles restarts and shutdowns via the svc program.
+    #
+    exec "${RUN_CMD[@]}"
+
+    ;;
 
   run|demo)
-        echo "Running Jetty: "
+    echo "Running Jetty: "
 
-        if [ -f $JETTY_PID ]
-        then
-            if running $JETTY_PID
-            then
-              echo "Already Running!!"
-              exit 1
-            else
-              # dead pid file - remove
-              rm -f $JETTY_PID
-            fi
-        fi
+    if running "$JETTY_PID"
+    then
+      echo Already Running $(cat "$JETTY_PID")!
+      exit 1
+    fi
 
-        exec $RUN_CMD
-        ;;
-
-  check)
-        echo "Checking arguments to Jetty: "
-        echo "JETTY_HOME     =  $JETTY_HOME"
-        echo "JETTY_CONF     =  $JETTY_CONF"
-        echo "JETTY_RUN      =  $JETTY_RUN"
-        echo "JETTY_PID      =  $JETTY_PID"
-        echo "JETTY_PORT     =  $JETTY_PORT"
-        echo "JETTY_LOGS     =  $JETTY_LOGS"
-        echo "CONFIGS        =  $CONFIGS"
-        echo "JAVA_OPTIONS   =  $JAVA_OPTIONS"
-        echo "JAVA           =  $JAVA"
-        echo "CLASSPATH      =  $CLASSPATH"
-        echo "RUN_CMD        =  $RUN_CMD"
-        echo
-
-        if [ -f $JETTY_PID ]
-        then
-            echo "Jetty running pid="`cat $JETTY_PID`
-            exit 0
-        fi
-        exit 1
-        ;;
+    exec "${RUN_CMD[@]}"
+    ;;
+
+  check|status)
+    if running "$JETTY_PID"
+    then
+      echo "Jetty running pid=$(< "$JETTY_PID")"
+    else
+      echo "Jetty NOT running"
+    fi
+    echo
+    dumpEnv
+    echo
+
+    if running "$JETTY_PID"
+    then
+      exit 0
+    fi
+    exit 1
+
+    ;;
+
+  *)
+    usage
 
-*)
-        usage
-	;;
+    ;;
 esac
 
 exit 0
\ No newline at end of file
diff --git a/solr/bin/solr b/solr/bin/solr
index 8761183..e907628 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -844,7 +844,6 @@ function stop_solr() {
 
   echo -e "Sending stop command to Solr running on port $SOLR_PORT ...  "$JAVA" -cp $SOLR_TIP/server/lib/ext/solr-core*.jar $SOLR_SSL_OPTS $AUTHC_OPTS org.apache.solr.servlet.StopJetty "-DSTOP.PORT=$THIS_STOP_PORT" "-DSTOP.KEY=$STOP_KEY""
   "$JAVA" -cp $SOLR_TIP/server/lib/ext/solr-core*.jar $SOLR_SSL_OPTS $AUTHC_OPTS "-DSTOP.PORT=$THIS_STOP_PORT" "-DSTOP.KEY=$STOP_KEY" org.apache.solr.servlet.StopJetty || true
-  sleep .6
   PID=$(cat $SOLR_PID_DIR/$JETTY_PID)
   rm $SOLR_PID_DIR/$JETTY_PID
 } # end stop_solr