From: <gv...@hy...> - 2008-02-29 01:36:42
|
Author: gviedma Date: 2008-02-28 14:11:53 -0800 (Thu, 28 Feb 2008) New Revision: 7953 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=7953 Added: trunk/bin/hq-agent-wrapper.bat trunk/bin/hq-agent-wrapper.sh Log: Java Server Wrapper agent scripts Added: trunk/bin/hq-agent-wrapper.bat =================================================================== --- trunk/bin/hq-agent-wrapper.bat (rev 0) +++ trunk/bin/hq-agent-wrapper.bat 2008-02-28 22:11:53 UTC (rev 7953) @@ -0,0 +1,126 @@ +@echo off +setlocal + +rem Copyright (c) 1999, 2006 Tanuki Software Inc. +rem +rem Java Service Wrapper command based script +rem + +if "%OS%"=="Windows_NT" goto nt +echo This script only works with NT-based versions of Windows. +goto :eof + +:nt +rem +rem Find the application home. +rem +rem %~dp0 is location of current script under NT +set _REALPATH=%~dp0 + +rem +rem Detect JAVA_HOME +rem +cd %_REALPATH% + +if not "%JAVA_HOME%"=="" goto gotjava + +if not "%HQ_JAVA_HOME%"=="" ( + set JAVA_HOME=%HQ_JAVA_HOME% + goto gotjava +) +if EXIST %_REALPATH%\jre\nul ( + set JAVA_HOME=%_REALPATH%\jre + goto gotjava +) + +:nojava + echo JAVA_HOME or HQ_JAVA_HOME must be set when invoking the agent +goto :eof + +:gotjava +rem Decide on the wrapper binary. +set _WRAPPER_BASE=wrapper +set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe +if exist "%_WRAPPER_EXE%" goto validate +set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe +if exist "%_WRAPPER_EXE%" goto validate +set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%.exe +if exist "%_WRAPPER_EXE%" goto validate +echo Unable to locate a Wrapper executable using any of the following names: +echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe +echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe +echo %_REALPATH%%_WRAPPER_BASE%.exe +pause +goto :eof + +:validate +rem Find the requested command. +for /F %%v in ('echo %1^|findstr "^console$ ^start$ ^stop$ ^restart$ ^install$ ^remove$ ^query$ ^ping$ ^setup"') do call :exec set COMMAND=%%v + +if "%COMMAND%" == "" ( + echo Usage: %0 { console : start : stop : restart : install : remove : query : ping : setup } + pause + goto :eof +) else ( + shift +) + +rem +rem Find the wrapper.conf +rem +:conf +set _WRAPPER_CONF="%_REALPATH%conf\wrapper.conf" + +rem +rem Run the application. +rem At runtime, the current directory will be that of wrapper.exe +rem +call :%COMMAND% +if errorlevel 1 pause +goto :eof + +:console +"%_WRAPPER_EXE%" -c %_WRAPPER_CONF% +goto :eof + +:start +"%_WRAPPER_EXE%" -t %_WRAPPER_CONF% +goto :eof + +:stop +"%_WRAPPER_EXE%" -p %_WRAPPER_CONF% +goto :eof + +:install +"%_WRAPPER_EXE%" -i %_WRAPPER_CONF% +goto :eof + +:remove +"%_WRAPPER_EXE%" -r %_WRAPPER_CONF% +goto :eof + +:query +"%_WRAPPER_EXE%" -q %_WRAPPER_CONF% +goto :eof + +:restart +call :stop +call :start +goto :eof + +:exec +%* +goto :eof + +rem +rem HQ Agent specific commands +rem + +:ping +"%JAVA_HOME%\bin\java" -Djava.compiler=NONE -Djava.security.auth.login.config=jaas.config -Dagent.mode=thread -Xmx256M -Xrs -Xmx128m -Djava.net.preferIPv4Stack=true -Djava.library.path="lib" -classpath "lib/AgentClient.jar;lib/AgentServer.jar;lib/lather.jar;pdk/lib/activation.jar;pdk/lib/ant.jar;pdk/lib/backport-util-concurrent.jar;pdk/lib/commons-beanutils.jar;pdk/lib/commons-codec-1.3.jar;pdk/lib/commons-collections.jar;pdk/lib/commons-httpclient-2.0.jar;pdk/lib/commons-logging.jar;pdk/lib/dnsjava-2.0.3.jar;pdk/lib/getopt.jar;pdk/lib/hq-product.jar;pdk/lib/hyperic-util.jar;pdk/lib/jakarta-oro-2.0.7.jar;pdk/lib/jdom_b8.jar;pdk/lib/jsch-0.1.34.jar;pdk/lib/json.jar;pdk/lib/junit.jar;pdk/lib/jxla.jar;pdk/lib/log4j-1.2.14.jar;pdk/lib/sigar.jar;pdk/lib/snmp4j.jar;pdk/lib/tomcat-jk.jar;pdk/lib/ws-commons-util-1.0.2.jar;pdk/lib/xalan.jar;pdk/lib/xml-apis.jar;pdk/lib/xmlrpc-client-3.1.jar;pdk/lib/xmlrpc-common-3.1.jar;pdk/lib/xpp3_min-1.1.3.4.O.jar;pdk/lib/xstream-1.2.1.jar" org.hy peric.hq.bizapp.agent.client.AgentClient ping +IF %ERRORLEVEL% NEQ 0 (echo Ping failed!) else echo Ping success! +goto :eof + +:setup +"%JAVA_HOME%\bin\java" -Djava.compiler=NONE -Djava.security.auth.login.config=jaas.config -Dagent.mode=thread -Xmx256M -Xrs -Xmx128m -Djava.net.preferIPv4Stack=true -Djava.library.path="lib" -classpath "lib/AgentClient.jar;lib/AgentServer.jar;lib/lather.jar;pdk/lib/activation.jar;pdk/lib/ant.jar;pdk/lib/backport-util-concurrent.jar;pdk/lib/commons-beanutils.jar;pdk/lib/commons-codec-1.3.jar;pdk/lib/commons-collections.jar;pdk/lib/commons-httpclient-2.0.jar;pdk/lib/commons-logging.jar;pdk/lib/dnsjava-2.0.3.jar;pdk/lib/getopt.jar;pdk/lib/hq-product.jar;pdk/lib/hyperic-util.jar;pdk/lib/jakarta-oro-2.0.7.jar;pdk/lib/jdom_b8.jar;pdk/lib/jsch-0.1.34.jar;pdk/lib/json.jar;pdk/lib/junit.jar;pdk/lib/jxla.jar;pdk/lib/log4j-1.2.14.jar;pdk/lib/sigar.jar;pdk/lib/snmp4j.jar;pdk/lib/tomcat-jk.jar;pdk/lib/ws-commons-util-1.0.2.jar;pdk/lib/xalan.jar;pdk/lib/xml-apis.jar;pdk/lib/xmlrpc-client-3.1.jar;pdk/lib/xmlrpc-common-3.1.jar;pdk/lib/xpp3_min-1.1.3.4.O.jar;pdk/lib/xstream-1.2.1.jar" org.hy peric.hq.bizapp.agent.client.AgentClient setup +goto :eof Added: trunk/bin/hq-agent-wrapper.sh =================================================================== --- trunk/bin/hq-agent-wrapper.sh (rev 0) +++ trunk/bin/hq-agent-wrapper.sh 2008-02-28 22:11:53 UTC (rev 7953) @@ -0,0 +1,769 @@ +#! /bin/sh + +# +# Copyright (c) 1999, 2006 Tanuki Software Inc. +# +# Java Service Wrapper sh script. Suitable for starting and stopping +# wrapped Java applications on UNIX platforms. +# + +#----------------------------------------------------------------------------- +# These settings can be modified to fit the needs of your application + +AGENT_LIB=../lib +PDK_LIB=../pdk/lib + +if [ "x${HQ_JAVA_HOME}" != "x" ] ; then + HQ_JAVA_HOME=${HQ_JAVA_HOME} +elif [ -d jre ]; then + HQ_JAVA_HOME=jre + # Just in case + chmod -R +x jre/bin/* +elif [ "x$JAVA_HOME" != "x" ] ; then + HQ_JAVA_HOME=${JAVA_HOME} +else + case "`uname`" in + Darwin) + HQ_JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home + ;; + *) + echo "HQ_JAVA_HOME or JAVA_HOME must be set when invoking the agent" + exit 1 + ;; + esac +fi + +HQ_JAVA="${HQ_JAVA_HOME}/bin/java" + +CLIENT_CLASSPATH="${AGENT_LIB}/AgentClient.jar" +CLIENT_CLASSPATH="${CLIENT_CLASSPATH}:${PDK_LIB}/commons-logging.jar" +CLIENT_CLASSPATH="${CLIENT_CLASSPATH}:${PDK_LIB}/log4j-1.2.14.jar" +CLIENT_CLASSPATH="${CLIENT_CLASSPATH}:${PDK_LIB}/hyperic-util.jar" +CLIENT_CLASSPATH="${CLIENT_CLASSPATH}:${PDK_LIB}/sigar.jar" +CLIENT_CLASSPATH="${CLIENT_CLASSPATH}:${PDK_LIB}/hq-product.jar" +CLIENT_CLASSPATH="${CLIENT_CLASSPATH}:${PDK_LIB}/commons-httpclient-2.0.jar" +CLIENT_CLASSPATH="${CLIENT_CLASSPATH}:${PDK_LIB}/commons-codec-1.3.jar" +CLIENT_CLASSPATH="${CLIENT_CLASSPATH}:${AGENT_LIB}/lather.jar" + +CLIENT_CLASSPATH="${CLIENT_CLASSPATH}:${JDK13_COMPAT}" + +CLIENT_CLASS=org.hyperic.hq.bizapp.agent.client.AgentClient + +CLIENT_CMD="${HQ_JAVA} \ + -Djava.net.preferIPv4Stack=true \ + -D${AGENTPROPFILE_PROP}=${AGENT_PROPS} \ + -cp ${CLIENT_CLASSPATH} ${CLIENT_CLASS}" + +PING_CMD="${CLIENT_CMD} ping" +SETUP_CMD="${CLIENT_CMD} setup" + +# Application +APP_NAME="hq-agent" +APP_LONG_NAME="HQ Agent" + +# Wrapper +WRAPPER_CMD="../sbin/wrapper" +WRAPPER_CONF="../conf/wrapper.conf" + +# Priority at which to run the wrapper. See "man nice" for valid priorities. +# nice is only used if a priority is specified. +PRIORITY= + +# Location of the pid file. +PIDDIR="." + +# If uncommented, causes the Wrapper to be shutdown using an anchor file. +# When launched with the 'start' command, it will also ignore all INT and +# TERM signals. +#IGNORE_SIGNALS=true + +# Wrapper will start the JVM asynchronously. Your application may have some +# initialization tasks and it may be desirable to wait a few seconds +# before returning. For example, to delay the invocation of following +# startup scripts. Setting WAIT_AFTER_STARTUP to a positive number will +# cause the start command to delay for the indicated period of time +# (in seconds). +# +WAIT_AFTER_STARTUP=0 + +# If set, the status, start_msg and stop_msg commands will print out detailed +# state information on the Wrapper and Java processes. +#DETAIL_STATUS=true + +# If specified, the Wrapper will be run as the specified user. +# IMPORTANT - Make sure that the user has the required privileges to write +# the PID file and wrapper.log files. Failure to be able to write the log +# file will cause the Wrapper to exit without any way to write out an error +# message. +# NOTE - This will set the user which is used to run the Wrapper as well as +# the JVM and is not useful in situations where a privileged resource or +# port needs to be allocated prior to the user being changed. +#RUN_AS_USER= + +# The following two lines are used by the chkconfig command. Change as is +# appropriate for your application. They should remain commented. +# chkconfig: 2345 20 80 +# description: @app.long.name@ + +# Initialization block for the install_initd and remove_initd scripts used by +# SUSE linux distributions. +### BEGIN INIT INFO +# Provides: @app.name@ +# Required-Start: $local_fs $network $syslog +# Should-Start: +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: @app.long.name@ +# Description: @app.description@ +### END INIT INFO + +# Do not modify anything beyond this point +#----------------------------------------------------------------------------- + +# Get the fully qualified path to the script +case $0 in + /*) + SCRIPT="$0" + ;; + *) + PWD=`pwd` + SCRIPT="$PWD/$0" + ;; +esac + +# Resolve the true real path without any sym links. +CHANGED=true +while [ "X$CHANGED" != "X" ] +do + # Change spaces to ":" so the tokens can be parsed. + SAFESCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'` + # Get the real path to this script, resolving any symbolic links + TOKENS=`echo $SAFESCRIPT | sed -e 's;/; ;g'` + REALPATH= + for C in $TOKENS; do + # Change any ":" in the token back to a space. + C=`echo $C | sed -e 's;:; ;g'` + REALPATH="$REALPATH/$C" + # If REALPATH is a sym link, resolve it. Loop for nested links. + while [ -h "$REALPATH" ] ; do + LS="`ls -ld "$REALPATH"`" + LINK="`expr "$LS" : '.*-> \(.*\)$'`" + if expr "$LINK" : '/.*' > /dev/null; then + # LINK is absolute. + REALPATH="$LINK" + else + # LINK is relative. + REALPATH="`dirname "$REALPATH"`""/$LINK" + fi + done + done + + if [ "$REALPATH" = "$SCRIPT" ] + then + CHANGED="" + else + SCRIPT="$REALPATH" + fi +done + +# Change the current directory to the location of the script +cd "`dirname "$REALPATH"`" +REALDIR=`pwd` + +# If the PIDDIR is relative, set its value relative to the full REALPATH to avoid problems if +# the working directory is later changed. +FIRST_CHAR=`echo $PIDDIR | cut -c1,1` +if [ "$FIRST_CHAR" != "/" ] +then + PIDDIR=$REALDIR/$PIDDIR +fi +# Same test for WRAPPER_CMD +FIRST_CHAR=`echo $WRAPPER_CMD | cut -c1,1` +if [ "$FIRST_CHAR" != "/" ] +then + WRAPPER_CMD=$REALDIR/$WRAPPER_CMD +fi +# Same test for WRAPPER_CONF +FIRST_CHAR=`echo $WRAPPER_CONF | cut -c1,1` +if [ "$FIRST_CHAR" != "/" ] +then + WRAPPER_CONF=$REALDIR/$WRAPPER_CONF +fi + +# Process ID +ANCHORFILE="$PIDDIR/$APP_NAME.anchor" +STATUSFILE="$PIDDIR/$APP_NAME.status" +JAVASTATUSFILE="$PIDDIR/$APP_NAME.java.status" +PIDFILE="$PIDDIR/$APP_NAME.pid" +LOCKDIR="/var/lock/subsys" +LOCKFILE="$LOCKDIR/$APP_NAME" +pid="" + +# Resolve the location of the 'ps' command +PSEXE="/usr/bin/ps" +if [ ! -x "$PSEXE" ] +then + PSEXE="/bin/ps" + if [ ! -x "$PSEXE" ] + then + echo "Unable to locate 'ps'." + echo "Please report this message along with the location of the command on your system." + exit 1 + fi +fi + +# Resolve the os +DIST_OS=`uname -s | tr [:upper:] [:lower:] | tr -d [:blank:]` +case "$DIST_OS" in + 'sunos') + DIST_OS="solaris" + ;; + 'hp-ux' | 'hp-ux64') + # HP-UX needs the XPG4 version of ps (for -o args) + DIST_OS="hpux" + UNIX95="" + export UNIX95 + ;; + 'darwin') + DIST_OS="macosx" + ;; + 'unix_sv') + DIST_OS="unixware" + ;; +esac + +# Resolve the architecture +if [ "$DIST_OS" = "macosx" ] +then + DIST_ARCH="universal" +else + DIST_ARCH= + DIST_ARCH=`uname -p 2>/dev/null | tr [:upper:] [:lower:] | tr -d [:blank:]` + if [ "X$DIST_ARCH" = "X" ] + then + DIST_ARCH="unknown" + fi + if [ "$DIST_ARCH" = "unknown" ] + then + DIST_ARCH=`uname -m 2>/dev/null | tr [:upper:] [:lower:] | tr -d [:blank:]` + fi + case "$DIST_ARCH" in + 'amd64' | 'athlon' | 'i386' | 'i486' | 'i586' | 'i686' | 'x86_64') + DIST_ARCH="x86" + ;; + 'ia32' | 'ia64' | 'ia64n' | 'ia64w') + DIST_ARCH="ia" + ;; + 'ip27') + DIST_ARCH="mips" + ;; + 'power' | 'powerpc' | 'power_pc' | 'ppc64') + DIST_ARCH="ppc" + ;; + 'pa_risc' | 'pa-risc') + DIST_ARCH="parisc" + ;; + 'sun4u' | 'sparcv9') + DIST_ARCH="sparc" + ;; + '9000/800') + DIST_ARCH="parisc" + ;; + esac +fi + +# OSX always places Java in the same location so we can reliably set JAVA_HOME +if [ "$DIST_OS" = "macosx" ] +then + if [ -z "$JAVA_HOME" ]; then + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi +fi + +outputFile() { + if [ -f "$1" ] + then + echo " $1 (Found but not executable.)"; + else + echo " $1" + fi +} + +# Decide on the wrapper binary to use. +# If a 32-bit wrapper binary exists then it will work on 32 or 64 bit +# platforms, if the 64-bit binary exists then the distribution most +# likely wants to use long names. Otherwise, look for the default. +WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" +if [ -x "$WRAPPER_TEST_CMD" ] +then + WRAPPER_CMD="$WRAPPER_TEST_CMD" +else + WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" + if [ -x "$WRAPPER_TEST_CMD" ] + then + WRAPPER_CMD="$WRAPPER_TEST_CMD" + else + if [ ! -x "$WRAPPER_CMD" ] + then + echo "Unable to locate any of the following binaries:" + outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" + outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" + outputFile "$WRAPPER_CMD" + exit 1 + fi + fi +fi + +# Build the nice clause +if [ "X$PRIORITY" = "X" ] +then + CMDNICE="" +else + CMDNICE="nice -$PRIORITY" +fi + +# Build the anchor file clause. +if [ "X$IGNORE_SIGNALS" = "X" ] +then + ANCHORPROP= + IGNOREPROP= +else + ANCHORPROP=wrapper.anchorfile=\"$ANCHORFILE\" + IGNOREPROP=wrapper.ignore_signals=TRUE +fi + +# Build the status file clause. +if [ "X$DETAIL_STATUS" = "X" ] +then + STATUSPROP= +else + STATUSPROP="wrapper.statusfile=\"$STATUSFILE\" wrapper.java.statusfile=\"$JAVASTATUSFILE\"" +fi + +# Build the lock file clause. Only create a lock file if the lock directory exists on this platform. +LOCKPROP= +if [ -d $LOCKDIR ] +then + if [ -w $LOCKDIR ] + then + LOCKPROP=wrapper.lockfile=\"$LOCKFILE\" + fi +fi + +checkUser() { + # $1 touchLock flag + # $2 command + + # Check the configured user. If necessary rerun this script as the desired user. + if [ "X$RUN_AS_USER" != "X" ] + then + # Resolve the location of the 'id' command + IDEXE="/usr/xpg4/bin/id" + if [ ! -x "$IDEXE" ] + then + IDEXE="/usr/bin/id" + if [ ! -x "$IDEXE" ] + then + echo "Unable to locate 'id'." + echo "Please report this message along with the location of the command on your system." + exit 1 + fi + fi + + if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ] + then + # Already running as the configured user. Avoid password prompts by not calling su. + RUN_AS_USER="" + fi + fi + if [ "X$RUN_AS_USER" != "X" ] + then + # If LOCKPROP and $RUN_AS_USER are defined then the new user will most likely not be + # able to create the lock file. The Wrapper will be able to update this file once it + # is created but will not be able to delete it on shutdown. If $2 is defined then + # the lock file should be created for the current command + if [ "X$LOCKPROP" != "X" ] + then + if [ "X$1" != "X" ] + then + # Resolve the primary group + RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1` + if [ "X$RUN_AS_GROUP" = "X" ] + then + RUN_AS_GROUP=$RUN_AS_USER + fi + touch $LOCKFILE + chown $RUN_AS_USER:$RUN_AS_GROUP $LOCKFILE + fi + fi + + # Still want to change users, recurse. This means that the user will only be + # prompted for a password once. Variables shifted by 1 + # + # Use "runuser" if this exists. runuser should be used on RedHat in preference to su. + # + if test -f "/sbin/runuser" + then + /sbin/runuser - $RUN_AS_USER -c "\"$REALPATH\" $2" + else + su - $RUN_AS_USER -c "\"$REALPATH\" $2" + fi + + # Now that we are the original user again, we may need to clean up the lock file. + if [ "X$LOCKPROP" != "X" ] + then + getpid + if [ "X$pid" = "X" ] + then + # Wrapper is not running so make sure the lock file is deleted. + if [ -f "$LOCKFILE" ] + then + rm "$LOCKFILE" + fi + fi + fi + + exit 0 + fi +} + +getpid() { + pid="" + if [ -f "$PIDFILE" ] + then + if [ -r "$PIDFILE" ] + then + pid=`cat "$PIDFILE"` + if [ "X$pid" != "X" ] + then + # It is possible that 'a' process with the pid exists but that it is not the + # correct process. This can happen in a number of cases, but the most + # common is during system startup after an unclean shutdown. + # The ps statement below looks for the specific wrapper command running as + # the pid. If it is not found then the pid file is considered to be stale. + case "$DIST_OS" in + 'macosx') + pidtest=`$PSEXE -ww -p $pid -o command | grep "$WRAPPER_CMD" | tail -1` + ;; + *) + pidtest=`$PSEXE -p $pid -o args | grep "$WRAPPER_CMD" | tail -1` + ;; + esac + + if [ "X$pidtest" = "X" ] + then + # This is a stale pid file. + rm -f "$PIDFILE" + echo "Removed stale pid file: $PIDFILE" + pid="" + fi + fi + else + echo "Cannot read $PIDFILE." + exit 1 + fi + fi +} + +getstatus() { + STATUS= + if [ -f "$STATUSFILE" ] + then + if [ -r "$STATUSFILE" ] + then + STATUS=`cat "$STATUSFILE"` + fi + fi + if [ "X$STATUS" = "X" ] + then + STATUS="Unknown" + fi + + JAVASTATUS= + if [ -f "$JAVASTATUSFILE" ] + then + if [ -r "$JAVASTATUSFILE" ] + then + JAVASTATUS=`cat "$JAVASTATUSFILE"` + fi + fi + if [ "X$JAVASTATUS" = "X" ] + then + JAVASTATUS="Unknown" + fi +} + +testpid() { + pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` + if [ "X$pid" = "X" ] + then + # Process is gone so remove the pid file. + rm -f "$PIDFILE" + pid="" + fi +} + +console() { + echo "Running $APP_LONG_NAME..." + getpid + if [ "X$pid" = "X" ] + then + # The string passed to eval must handles spaces in paths correctly. + COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $LOCKPROP" + eval $COMMAND_LINE + else + echo "$APP_LONG_NAME is already running." + exit 1 + fi +} + +start() { + echo -n "Starting $APP_LONG_NAME..." + getpid + if [ "X$pid" = "X" ] + then + # The string passed to eval must handles spaces in paths correctly. + COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $LOCKPROP" + eval $COMMAND_LINE + else + echo "$APP_LONG_NAME is already running." + exit 1 + fi + + # Sleep for a few seconds to allow for intialization if required + # then test to make sure we're still running. + # + i=0 + while [ $i -lt $WAIT_AFTER_STARTUP ] + do + sleep 1 + echo -n "." + i=`expr $i + 1` + done + if [ $WAIT_AFTER_STARTUP -gt 0 ] + then + getpid + if [ "X$pid" = "X" ] + then + echo " WARNING: $APP_LONG_NAME may have failed to start." + exit 1 + else + echo " running ($pid)." + fi + else + echo "" + fi +} + +stopit() { + echo "Stopping $APP_LONG_NAME..." + getpid + if [ "X$pid" = "X" ] + then + echo "$APP_LONG_NAME was not running." + else + if [ "X$IGNORE_SIGNALS" = "X" ] + then + # Running so try to stop it. + kill $pid + if [ $? -ne 0 ] + then + # An explanation for the failure should have been given + echo "Unable to stop $APP_LONG_NAME." + exit 1 + fi + else + rm -f "$ANCHORFILE" + if [ -f "$ANCHORFILE" ] + then + # An explanation for the failure should have been given + echo "Unable to stop $APP_LONG_NAME." + exit 1 + fi + fi + + # We can not predict how long it will take for the wrapper to + # actually stop as it depends on settings in wrapper.conf. + # Loop until it does. + savepid=$pid + CNT=0 + TOTCNT=0 + while [ "X$pid" != "X" ] + do + # Show a waiting message every 5 seconds. + if [ "$CNT" -lt "5" ] + then + CNT=`expr $CNT + 1` + else + echo "Waiting for $APP_LONG_NAME to exit..." + CNT=0 + fi + TOTCNT=`expr $TOTCNT + 1` + + sleep 1 + + testpid + done + + pid=$savepid + testpid + if [ "X$pid" != "X" ] + then + echo "Failed to stop $APP_LONG_NAME." + exit 1 + else + echo "Stopped $APP_LONG_NAME." + fi + fi +} + +status() { + getpid + if [ "X$pid" = "X" ] + then + echo "$APP_LONG_NAME is not running." + exit 1 + else + if [ "X$DETAIL_STATUS" = "X" ] + then + echo "$APP_LONG_NAME is running (PID:$pid)." + else + getstatus + echo "$APP_LONG_NAME is running (PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS)" + fi + exit 0 + fi +} + +dump() { + echo "Dumping $APP_LONG_NAME..." + getpid + if [ "X$pid" = "X" ] + then + echo "$APP_LONG_NAME was not running." + else + kill -3 $pid + + if [ $? -ne 0 ] + then + echo "Failed to dump $APP_LONG_NAME." + exit 1 + else + echo "Dumped $APP_LONG_NAME." + fi + fi +} + +# Used by HP-UX init scripts. +startmsg() { + getpid + if [ "X$pid" = "X" ] + then + echo "Starting $APP_LONG_NAME... (Wrapper:Stopped)" + else + if [ "X$DETAIL_STATUS" = "X" ] + then + echo "Starting $APP_LONG_NAME... (Wrapper:Running)" + else + getstatus + echo "Starting $APP_LONG_NAME... (Wrapper:$STATUS, Java:$JAVASTATUS)" + fi + fi +} + +# Used by HP-UX init scripts. +stopmsg() { + getpid + if [ "X$pid" = "X" ] + then + echo "Stopping $APP_LONG_NAME... (Wrapper:Stopped)" + else + if [ "X$DETAIL_STATUS" = "X" ] + then + echo "Stopping $APP_LONG_NAME... (Wrapper:Running)" + else + getstatus + echo "Stopping $APP_LONG_NAME... (Wrapper:$STATUS, Java:$JAVASTATUS)" + fi + fi +} + + +ping() { + echo Pinging ... + VAL=`$PING_CMD 2>&1` + if [ "$?" = "0" ] ; then + echo 'Success!' + else + echo 'Failure!' + echo $VAL + exit 1 + fi +} + +# Used by HP-UX init scripts. +setup() { + ${SETUP_CMD} +} + +case "$1" in + + 'console') + checkUser touchlock $1 + console + ;; + + 'start') + checkUser touchlock $1 + start + ;; + + 'stop') + checkUser "" $1 + stopit + ;; + + 'restart') + checkUser touchlock $1 + stopit + start + ;; + + 'status') + checkUser "" $1 + status + ;; + + 'dump') + checkUser "" $1 + dump + ;; + + 'start_msg') + checkUser "" $1 + startmsg + ;; + + 'stop_msg') + checkUser "" $1 + stopmsg + ;; + + 'ping') + checkUser "" $1 + ping + ;; + + 'setup') + checkUser "" $1 + setup + ;; + + *) + echo "Usage: $0 { console | start | stop | restart | status | dump | ping | setup }" + exit 1 + ;; +esac + +exit 0 |