403281 jetty.sh waits for started before OK

This commit is contained in:
Greg Wilkins 2013-03-14 11:44:04 +11:00
parent 29b83dff9b
commit a7238f2688
4 changed files with 140 additions and 22 deletions

View File

@ -106,10 +106,24 @@ findDirectory()
running()
{
local PID=$(cat "$1" 2>/dev/null) || return 1
local PID=$(head -n 1 "$1" 2>/dev/null) || return 1
kill -0 "$PID" 2>/dev/null
}
started()
{
# wait for 60s to see "STARTED" in PID file, needs jetty-started.xml as argument
for T in 1 2 3 4 5 6 7 9 10 11 12 13 14 15
do
sleep 4
[ -z "$(grep STARTED $1)" ] || return 0
echo -n ". "
done
return 1;
}
readConfig()
{
(( DEBUG )) && echo "Reading $1.."
@ -137,7 +151,13 @@ shift
##################################################
# Read any configuration files
##################################################
for CONFIG in /etc/default/jetty{,9} $HOME/.jettyrc; do
ETC=/etc
if [ $UID != 0 ]
then
ETC=$HOME/etc
fi
for CONFIG in $ETC/default/jetty{,9} $HOME/.jettyrc; do
if [ -f "$CONFIG" ] ; then
readConfig "$CONFIG"
fi
@ -262,9 +282,9 @@ fi
##################################################
if [ -z "$JETTY_CONF" ]
then
if [ -f /etc/jetty.conf ]
if [ -f $ETC/jetty.conf ]
then
JETTY_CONF=/etc/jetty.conf
JETTY_CONF=$ETC/jetty.conf
elif [ -f "$JETTY_HOME/etc/jetty.conf" ]
then
JETTY_CONF=$JETTY_HOME/etc/jetty.conf
@ -318,6 +338,7 @@ if [ -z "$JETTY_PID" ]
then
JETTY_PID="$JETTY_RUN/jetty.pid"
fi
JAVA_OPTIONS+=("-Djetty.pid=$JETTY_PID")
##################################################
# Setup JAVA if unset
@ -407,23 +428,15 @@ case "$ACTION" in
exit
fi
if type start-stop-daemon > /dev/null 2>&1
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
if start-stop-daemon -S -p"$JETTY_PID" $CH_USER -d"$JETTY_HOME" -b -m -a "$JAVA" -- "${RUN_ARGS[@]}" --daemon
then
sleep 1
if running "$JETTY_PID"
then
echo "OK"
else
echo "FAILED"
fi
fi
start-stop-daemon -S -p"$JETTY_PID" $CH_USER -d"$JETTY_HOME" -b -m -a "$JAVA" -- "${RUN_ARGS[@]}" --daemon
else
@ -454,14 +467,20 @@ case "$ACTION" in
echo $! > "$JETTY_PID"
fi
echo "STARTED Jetty `date`"
fi
if started "$JETTY_PID"
then
echo "OK `date`"
else
echo "FAILED `date`"
fi
;;
stop)
echo -n "Stopping Jetty: "
if type start-stop-daemon > /dev/null 2>&1; then
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
@ -476,7 +495,7 @@ case "$ACTION" in
rm -f "$JETTY_PID"
echo OK
else
PID=$(cat "$JETTY_PID" 2>/dev/null)
PID=$(head -n 1 "$JETTY_PID" 2>/dev/null)
kill "$PID" 2>/dev/null
TIMEOUT=30

View File

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<!-- =============================================================== -->
<!-- Mixin the Start FileNoticeLifeCycleListener -->
<!-- =============================================================== -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Call name="addLifeCycleListener">
<Arg>
<New class="org.eclipse.jetty.util.component.FileNoticeLifeCycleListener">
<Arg><SystemProperty name="jetty.pid" default="./jetty.pid"/></Arg>
</New>
</Arg>
</Call>
</Configure>

View File

@ -6,8 +6,7 @@
# created by that script.
#
# Each line in this file becomes an arguement to start.jar
# unless this file contains an --ini option, then these
# arguments will be in addition to those found in the
# start.ini file
# in addition to those found in the start.ini file
# =======================================================
--pre=etc/jetty-logging.xml
etc/jetty-logging.xml
etc/jetty-started.xml

View File

@ -0,0 +1,85 @@
//
// ========================================================================
// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.util.component;
import java.io.FileWriter;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
/* ------------------------------------------------------------ */
/** A LifeCycle Listener that writes state changes to a file.
* <p>This can be used with the jetty.sh script to wait for successful startup.
*/
public class FileNoticeLifeCycleListener implements LifeCycle.Listener
{
Logger LOG = Log.getLogger(FileNoticeLifeCycleListener.class);
private final String _filename;
public FileNoticeLifeCycleListener(String filename)
{
_filename=filename;
}
private void writeState(String action, LifeCycle lifecycle)
{
try
{
FileWriter out = new FileWriter(_filename,true);
out.append(action).append(" ").append(lifecycle.toString()).append("\n");
out.close();
}
catch(Exception e)
{
LOG.warn(e);
}
}
@Override
public void lifeCycleStarting(LifeCycle event)
{
writeState("STARTING",event);
}
@Override
public void lifeCycleStarted(LifeCycle event)
{
writeState("STARTED",event);
}
@Override
public void lifeCycleFailure(LifeCycle event, Throwable cause)
{
writeState("FAILED",event);
}
@Override
public void lifeCycleStopping(LifeCycle event)
{
writeState("STOPPING",event);
}
@Override
public void lifeCycleStopped(LifeCycle event)
{
writeState("STOPPED",event);
}
}