From 0cf21406a4b62e9229ade5bb48814a72bca1433b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20=27Morty=27=20Str=C3=BCbe?= Date: Mon, 21 Jan 2013 12:27:20 +0100 Subject: [PATCH 1/2] Add platform independant startup script --- .../src/main/assembly/bin/tr.iwsn | 1343 +++++++++++++++++ 1 file changed, 1343 insertions(+) create mode 100755 assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn diff --git a/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn new file mode 100755 index 000000000..b546fe770 --- /dev/null +++ b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn @@ -0,0 +1,1343 @@ +#!/bin/bash + +# +# Copyright (c) 1999, 2010 Tanuki Software, Ltd. +# http://www.tanukisoftware.com +# All rights reserved. +# +# This software is the proprietary information of Tanuki Software. +# You shall use it only in accordance with the terms of the +# license agreement you entered into with Tanuki Software. +# http://wrapper.tanukisoftware.com/doc/english/licenseOverview.html +# +# 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 +# Optimized for use with version 3.5.2 of the Wrapper. + +# Application +APP_NAME="tr.iwsn" +APP_LONG_NAME="Testbed Runtime iWSN" + +# Wrapper +WRAPPER_CMD="../lib/wrapper" +WRAPPER_CONF="../conf/tr.iwsn.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, wait for the wrapper to report that the daemon has started +WAIT_FOR_STARTED_STATUS=true +WAIT_FOR_STARTED_TIMEOUT=120 + +# 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@ + +# When installing on On Mac OSX platforms, the following domain will be used to +# prefix the plist file name. +PLIST_DOMAIN=org.tanukisoftware.wrapper + +# 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 +#----------------------------------------------------------------------------- + +# Required for HP-UX Startup +if [ `uname -s` = "HP-UX" -o `uname -s` = "HP-UX64" ] ; then + PATH=$PATH:/usr/bin +fi + +# 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/ucb/ps" + if [ ! -x "$PSEXE" ] + then + PSEXE="/usr/bin/ps" + if [ ! -x "$PSEXE" ] + then + PSEXE="/bin/ps" + if [ ! -x "$PSEXE" ] + then + eval echo 'Unable to locate "ps".' + eval echo 'Please report this message along with the location of the command on your system.' + exit 1 + fi + fi + fi + +# Resolve the os +DIST_OS=`uname -s | tr [A-Z] [a-z] | tr -d ' '` +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" + ;; + 'os/390') + DIST_OS="zos" + ;; +esac + +# Resolve the architecture +if [ "$DIST_OS" = "macosx" ] +then + OS_VER=`sw_vers | grep 'ProductVersion:' | grep -o '[0-9]*\.[0-9]*\.[0-9]*'` + DIST_ARCH="universal" + if [[ "$OS_VER" < "10.5.0" ]] + then + DIST_BITS="32" + else + DIST_BITS="64" + fi + APP_PLIST_BASE=${PLIST_DOMAIN}.${APP_NAME} + APP_PLIST=${APP_PLIST_BASE}.plist +else + DIST_ARCH= + DIST_ARCH=`uname -p 2>/dev/null | tr [A-Z] [a-z] | tr -d ' '` + if [ "X$DIST_ARCH" = "X" ] + then + DIST_ARCH="unknown" + fi + if [ "$DIST_ARCH" = "unknown" ] + then + DIST_ARCH=`uname -m 2>/dev/null | tr [A-Z] [a-z] | tr -d ' '` + fi + case "$DIST_ARCH" in + 'athlon' | 'i386' | 'i486' | 'i586' | 'i686') + DIST_ARCH="x86" + if [ "${DIST_OS}" = "solaris" ] ; then + DIST_BITS=`isainfo -b` + else + DIST_BITS="32" + fi + ;; + 'amd64' | 'x86_64') + DIST_ARCH="x86" + DIST_BITS="64" + ;; + 'ia32') + DIST_ARCH="ia" + DIST_BITS="32" + ;; + 'ia64' | 'ia64n' | 'ia64w') + DIST_ARCH="ia" + DIST_BITS="64" + ;; + 'ip27') + DIST_ARCH="mips" + DIST_BITS="32" + ;; + 'power' | 'powerpc' | 'power_pc' | 'ppc64') + if [ "${DIST_ARCH}" = "ppc64" ] ; then + DIST_BITS="64" + else + DIST_BITS="32" + fi + DIST_ARCH="ppc" + if [ "${DIST_OS}" = "aix" ] ; then + if [ `getconf KERNEL_BITMODE` -eq 64 ]; then + DIST_BITS="64" + else + DIST_BITS="32" + fi + fi + ;; + 'pa_risc' | 'pa-risc') + DIST_ARCH="parisc" + if [ `getconf KERNEL_BITS` -eq 64 ]; then + DIST_BITS="64" + else + DIST_BITS="32" + fi + ;; + 'sun4u' | 'sparcv9' | 'sparc') + DIST_ARCH="sparc" + DIST_BITS=`isainfo -b` + ;; + '9000/800' | '9000/785') + DIST_ARCH="parisc" + if [ `getconf KERNEL_BITS` -eq 64 ]; then + DIST_BITS="64" + else + DIST_BITS="32" + fi + ;; + '2097') + DIST_ARCH="390" + DIST_BITS="32" + ;; + 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 + +# Test Echo +ECHOTEST=`echo -n "x"` +if [ "$ECHOTEST" = "x" ] +then + ECHOOPT="-n " +else + ECHOOPT="" +fi + + +gettext() { + echo $1 +} + +outputFile() { + if [ -f "$1" ] + then + eval echo ' $1 Found but not executable.'; + else + echo " $1" + fi +} + +# Decide on the wrapper binary to use. +# If the bits of the OS could be detected, we will try to look for the +# binary with the correct bits value. If it doesn't exist, fall back +# and look for the 32-bit binary. If that doesn't exist either then +# look for the default. +WRAPPER_TEST_CMD="" +if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" ] +then + WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" + if [ ! -x "$WRAPPER_TEST_CMD" ] + then + chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null + fi + if [ -x "$WRAPPER_TEST_CMD" ] + then + WRAPPER_CMD="$WRAPPER_TEST_CMD" + else + outputFile "$WRAPPER_TEST_CMD" + WRAPPER_TEST_CMD="" + fi +fi +if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" -a -z "$WRAPPER_TEST_CMD" ] +then + WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" + if [ ! -x "$WRAPPER_TEST_CMD" ] + then + chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null + fi + if [ -x "$WRAPPER_TEST_CMD" ] + then + WRAPPER_CMD="$WRAPPER_TEST_CMD" + else + outputFile "$WRAPPER_TEST_CMD" + WRAPPER_TEST_CMD="" + fi +fi +if [ -f "$WRAPPER_CMD" -a -z "$WRAPPER_TEST_CMD" ] +then + WRAPPER_TEST_CMD="$WRAPPER_CMD" + if [ ! -x "$WRAPPER_TEST_CMD" ] + then + chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null + fi + if [ -x "$WRAPPER_TEST_CMD" ] + then + WRAPPER_CMD="$WRAPPER_TEST_CMD" + else + outputFile "$WRAPPER_TEST_CMD" + WRAPPER_TEST_CMD="" + fi +fi +if [ -z $WRAPPER_TEST_CMD ] +then + echo "Unable to locate any of the following binaries:" + outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" + if [ ! "$DIST_BITS" = "32" ] + then + outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" + fi + outputFile "$WRAPPER_CMD" + + exit 1 +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$WAIT_FOR_STARTED_STATUS" = "X" ] +then + STATUSPROP= +else + STATUSPROP="wrapper.statusfile=\"$STATUSFILE\" wrapper.java.statusfile=\"$JAVASTATUSFILE\"" +fi + +if [ ! -n "$WAIT_FOR_STARTED_STATUS" ] +then + WAIT_FOR_STARTED_STATUS=true +fi + +if [ $WAIT_FOR_STARTED_STATUS = true ] ; then + DETAIL_STATUS=true +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 + eval echo 'Unable to locate "id".' + eval 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 + 'freebsd') + pidtest=`$PSEXE -p $pid -o args | tail -1` + if [ "X$pidtest" = "XCOMMAND" ] + then + pidtest="" + fi + ;; + 'macosx') + pidtest=`$PSEXE -ww -p $pid -o command | grep "$WRAPPER_CMD" | tail -1` + ;; + 'solaris') + if [ -f "/usr/bin/pargs" ] + then + pidtest=`pargs $pid | grep "$WRAPPER_CMD" | tail -1` + else + case "$PSEXE" in + '/usr/ucb/ps') + pidtest=`$PSEXE -auxww $pid | grep "$WRAPPER_CMD" | tail -1` + ;; + '/usr/bin/ps') + TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1` + COUNT=`echo $TRUNCATED_CMD | wc -m` + COUNT=`echo ${COUNT}` + COUNT=`expr $COUNT - 1` + TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT` + pidtest=`$PSEXE -o comm -p $pid | grep "$TRUNCATED_CMD" | tail -1` + ;; + '/bin/ps') + TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1` + COUNT=`echo $TRUNCATED_CMD | wc -m` + COUNT=`echo ${COUNT}` + COUNT=`expr $COUNT - 1` + TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT` + pidtest=`$PSEXE -o comm -p $pid | grep "$TRUNCATED_CMD" | tail -1` + ;; + *) + echo "Unsupported ps command $PSEXE" + exit 1 + ;; + esac + fi + ;; + 'hpux') + pidtest=`$PSEXE -p $pid -x -o args | 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" + eval echo 'Removed stale pid file: $PIDFILE' + pid="" + fi + fi + else + eval 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() { + case "$DIST_OS" in + 'solaris') + case "$PSEXE" in + '/usr/ucb/ps') + pid=`$PSEXE $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` + ;; + '/usr/bin/ps') + pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` + ;; + '/bin/ps') + pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` + ;; + *) + echo "Unsupported ps command $PSEXE" + exit 1 + ;; + esac + ;; + *) + pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` 2>/dev/null + ;; + esac + if [ "X$pid" = "X" ] + then + # Process is gone so remove the pid file. + rm -f "$PIDFILE" + pid="" + fi +} + +launchdtrap() { + stopit + exit +} + +waitforwrapperstop() { + getpid + while [ "X$pid" != "X" ] ; do + sleep 1 + getpid + done +} + +launchdinternal() { + getpid + trap launchdtrap TERM + 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 + eval echo '$APP_LONG_NAME is already running.' + exit 1 + fi + # launchd expects that this script stay up and running so we need to do our own monitoring of the Wrapper process. + if [ $WAIT_FOR_STARTED_STATUS = true ] + then + waitforwrapperstop + fi +} + +console() { + eval echo 'Running $APP_LONG_NAME...' + getpid + if [ "X$pid" = "X" ] + then + trap '' 3 + # 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 + eval echo '$APP_LONG_NAME is already running.' + exit 1 + fi +} + +waitforjavastartup() { + getstatus + eval echo $ECHOOPT `gettext 'Waiting for $APP_LONG_NAME...'` + + # Wait until the timeout or we have something besides Unknown. + counter=15 + while [ "$JAVASTATUS" = "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do + echo $ECHOOPT"." + sleep 1 + getstatus + counter=`expr $counter - 1` + done + + if [ -n "$WAIT_FOR_STARTED_TIMEOUT" ] ; then + counter=$WAIT_FOR_STARTED_TIMEOUT + else + counter=120 + fi + while [ "$JAVASTATUS" != "STARTED" -a "$JAVASTATUS" != "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do + echo $ECHOOPT"." + sleep 1 + getstatus + counter=`expr $counter - 1` + done + if [ "X$ECHOOPT" != "X" ] ; then + echo "" + fi +} + +startwait() { + if [ $WAIT_FOR_STARTED_STATUS = true ] + then + waitforjavastartup + 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 $ECHOOPT"." + i=`expr $i + 1` + done + if [ $WAIT_AFTER_STARTUP -gt 0 -o $WAIT_FOR_STARTED_STATUS = true ] + then + getpid + if [ "X$pid" = "X" ] + then + eval echo ' WARNING: $APP_LONG_NAME may have failed to start.' + exit 1 + else + eval echo ' running: PID:$pid' + fi + else + echo "" + fi +} + +macosxstart() { + # The daemon has been installed. + eval echo 'Starting $APP_LONG_NAME. Detected Mac OSX and installed launchd daemon.' + if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then + eval echo 'Must be root to perform this action.' + exit 1 + fi + + getpid + if [ "X$pid" != "X" ] ; then + eval echo '$APP_LONG_NAME is already running.' + exit 1 + fi + + # If the daemon was just installed, it may not be loaded. + LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}` + if [ "X${LOADED_PLIST}" = "X" ] ; then + launchctl load /Library/LaunchDaemons/${APP_PLIST} + fi + # If launchd is set to run the daemon already at Load, we don't need to call start + getpid + if [ "X$pid" == "X" ] ; then + launchctl start ${APP_PLIST_BASE} + fi + + startwait +} + +start() { + eval echo $ECHOOPT `gettext '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 + eval echo '$APP_LONG_NAME is already running.' + exit 1 + fi + + startwait +} + +stopit() { + # $1 exit if down flag + + eval echo 'Stopping $APP_LONG_NAME...' + getpid + if [ "X$pid" = "X" ] + then + eval echo '$APP_LONG_NAME was not running.' + if [ "X$1" = "X1" ] + then + exit 1 + fi + 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 + eval 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 + eval 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 + eval 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 + eval echo 'Failed to stop $APP_LONG_NAME.' + exit 1 + else + eval echo 'Stopped $APP_LONG_NAME.' + fi + fi +} + +status() { + getpid + if [ "X$pid" = "X" ] + then + eval echo '$APP_LONG_NAME is not running.' + exit 1 + else + if [ "X$DETAIL_STATUS" = "X" ] + then + eval echo '$APP_LONG_NAME is running: PID:$pid' + else + getstatus + eval echo '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS' + fi + exit 0 + fi +} + +installdaemon() { + if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then + eval echo 'Must be root to perform this action.' + exit 1 + else + APP_NAME_LOWER=`echo "$APP_NAME" | tr [A-Z] [a-z]` + if [ "$DIST_OS" = "solaris" ] ; then + eval echo 'Detected Solaris:' + if [ -f /etc/init.d/$APP_NAME ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + ln -s "$REALPATH" "/etc/init.d/$APP_NAME" + ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER" + ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER" + fi + elif [ "$DIST_OS" = "linux" ] ; then + if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then + eval echo 'Detected RHEL or Fedora:' + if [ -f "/etc/init.d/$APP_NAME" ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + ln -s "$REALPATH" "/etc/init.d/$APP_NAME" + /sbin/chkconfig --add "$APP_NAME" + /sbin/chkconfig "$APP_NAME" on + fi + elif [ -f /etc/SuSE-release ] ; then + eval echo 'Detected SuSE or SLES:' + if [ -f "/etc/init.d/$APP_NAME" ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + ln -s "$REALPATH" "/etc/init.d/$APP_NAME" + insserv "/etc/init.d/$APP_NAME" + fi + elif [ -f /etc/lsb-release ] ; then + eval echo 'Detected Ubuntu:' + if [ -f "/etc/init.d/$APP_NAME" ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + ln -s "$REALPATH" "/etc/init.d/$APP_NAME" + update-rc.d "$APP_NAME" defaults + fi + else + eval echo 'Detected Linux:' + if [ -f "/etc/init.d/$APP_NAME" ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + ln -s "$REALPATH" /etc/init.d/$APP_NAME + ln -s "/etc/init.d/$APP_NAME" "/etc/rc2.d/K20$APP_NAME_LOWER" + ln -s "/etc/init.d/$APP_NAME" "/etc/rc2.d/S20$APP_NAME_LOWER" + ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER" + ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER" + ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER" + ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/K20$APP_NAME_LOWER" + fi + fi + elif [ "$DIST_OS" = "hpux" ] ; then + eval echo 'Detected HP-UX:' + if [ -f "/sbin/init.d/$APP_NAME" ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + ln -s "$REALPATH" "/sbin/init.d/$APP_NAME" + ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/K20$APP_NAME_LOWER" + ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/S20$APP_NAME_LOWER" + fi + elif [ "$DIST_OS" = "aix" ] ; then + eval echo 'Detected AIX:' + if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + ln -s "$REALPATH" /etc/rc.d/init.d/$APP_NAME + ln -s "/etc/rc.d/init.d/$APP_NAME" "/etc/rc.d/rc2.d/S20$APP_NAME_LOWER" + ln -s "/etc/rc.d/init.d/$APP_NAME" "/etc/rc.d/rc2.d/K20$APP_NAME_LOWER" + fi + elif [ "$DIST_OS" = "freebsd" ] ; then + eval echo 'Detected FreeBSD:' + if [ -f "/etc/rc.d/$APP_NAME" ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf + if [ -f "${REALDIR}/${APP_NAME}.install" ] ; then + ln -s "${REALDIR}/${APP_NAME}.install" "/etc/rc.d/$APP_NAME" + else + echo '#!/bin/sh' > "/etc/rc.d/$APP_NAME" + echo "#" >> "/etc/rc.d/$APP_NAME" + echo "# PROVIDE: $APP_NAME" >> "/etc/rc.d/$APP_NAME" + echo "# REQUIRE: NETWORKING" >> "/etc/rc.d/$APP_NAME" + echo "# KEYWORD: shutdown" >> "/etc/rc.d/$APP_NAME" + echo ". /etc/rc.subr" >> "/etc/rc.d/$APP_NAME" + echo "name=\"$APP_NAME\"" >> "/etc/rc.d/$APP_NAME" + echo "rcvar=\`set_rcvar\`" >> "/etc/rc.d/$APP_NAME" + echo "command=\"${REALDIR}/${APP_NAME}\"" >> "/etc/rc.d/$APP_NAME" + echo 'start_cmd="${name}_start"' >> "/etc/rc.d/$APP_NAME" + echo 'load_rc_config $name' >> "/etc/rc.d/$APP_NAME" + echo 'status_cmd="${name}_status"' >> "/etc/rc.d/$APP_NAME" + echo 'stop_cmd="${name}_stop"' >> "/etc/rc.d/$APP_NAME" + echo "${APP_NAME}_status() {" >> "/etc/rc.d/$APP_NAME" + echo '${command} status' >> "/etc/rc.d/$APP_NAME" + echo '}' >> "/etc/rc.d/$APP_NAME" + echo "${APP_NAME}_stop() {" >> "/etc/rc.d/$APP_NAME" + echo '${command} stop' >> "/etc/rc.d/$APP_NAME" + echo '}' >> "/etc/rc.d/$APP_NAME" + echo "${APP_NAME}_start() {" >> "/etc/rc.d/$APP_NAME" + echo '${command} start' >> "/etc/rc.d/$APP_NAME" + echo '}' >> "/etc/rc.d/$APP_NAME" + echo 'run_rc_command "$1"' >> "/etc/rc.d/$APP_NAME" + fi + echo "${APP_NAME}_enable=\"YES\"" >> /etc/rc.conf + chmod 555 "/etc/rc.d/$APP_NAME" + fi + elif [ "$DIST_OS" = "macosx" ] ; then + eval echo 'Detected Mac OSX:' + if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + if [ -f "${REALDIR}/${APP_PLIST}" ] ; then + ln -s "${REALDIR}/${APP_PLIST}" "/Library/LaunchDaemons/${APP_PLIST}" + else + echo "" > "/Library/LaunchDaemons/${APP_PLIST}" + echo "> "/Library/LaunchDaemons/${APP_PLIST}" + echo "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo "" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " Label" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " ${APP_PLIST_BASE}" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " ProgramArguments" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " ${REALDIR}/${APP_NAME}" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " launchdinternal" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " OnDemand" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " RunAtLoad" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" + if [ "X$RUN_AS_USER" != "X" ] ; then + echo " UserName" >> "/Library/LaunchDaemons/${APP_PLIST}" + echo " ${RUN_AS_USER}" >> "/Library/LaunchDaemons/${APP_PLIST}" + fi + echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" + echo "" >> "/Library/LaunchDaemons/${APP_PLIST}" + fi + chmod 555 "/Library/LaunchDaemons/${APP_PLIST}" + fi + elif [ "$DIST_OS" = "zos" ] ; then + eval echo 'Detected z/OS:' + if [ -f /etc/rc.bak ] ; then + eval echo ' The $APP_LONG_NAME daemon is already installed.' + exit 1 + else + eval echo ' Installing the $APP_LONG_NAME daemon..' + cp /etc/rc /etc/rc.bak + sed "s:echo /etc/rc script executed, \`date\`::g" /etc/rc.bak > /etc/rc + echo "_BPX_JOBNAME='${APP_NAME}' \"${REALDIR}/${APP_NAME}\" start" >>/etc/rc + echo '/etc/rc script executed, `date`' >>/etc/rc + fi + else + eval echo 'Install not currently supported for $DIST_OS' + exit 1 + fi + fi +} + +removedaemon() { + if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then + eval echo 'Must be root to perform this action.' + exit 1 + else + stopit "0" + APP_NAME_LOWER=`echo "$APP_NAME" | tr [A-Z] [a-z]` + if [ "$DIST_OS" = "solaris" ] ; then + eval echo 'Detected Solaris:' + if [ -f "/etc/init.d/$APP_NAME" ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + for i in "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME" + do + rm -f $i + done + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + elif [ "$DIST_OS" = "linux" ] ; then + if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then + eval echo 'Detected RHEL or Fedora:' + if [ -f "/etc/init.d/$APP_NAME" ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + /sbin/chkconfig "$APP_NAME" off + /sbin/chkconfig --del "$APP_NAME" + rm -f "/etc/init.d/$APP_NAME" + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + elif [ -f /etc/SuSE-release ] ; then + eval echo 'Detected SuSE or SLES:' + if [ -f "/etc/init.d/$APP_NAME" ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + insserv -r "/etc/init.d/$APP_NAME" + rm -f "/etc/init.d/$APP_NAME" + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + elif [ -f /etc/lsb-release ] ; then + eval echo 'Detected Ubuntu:' + if [ -f "/etc/init.d/$APP_NAME" ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + update-rc.d -f "$APP_NAME" remove + rm -f "/etc/init.d/$APP_NAME" + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + else + eval echo 'Detected Linux:' + if [ -f "/etc/init.d/$APP_NAME" ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + for i in "/etc/rc2.d/S20$APP_NAME_LOWER" "/etc/rc2.d/K20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/rc5.d/K20$APP_NAME_LOWER" "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER" + do + rm -f $i + done + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + fi + elif [ "$DIST_OS" = "hpux" ] ; then + eval echo 'Detected HP-UX:' + if [ -f "/sbin/init.d/$APP_NAME" ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + for i in "/sbin/rc3.d/K20$APP_NAME_LOWER" "/sbin/rc3.d/S20$APP_NAME_LOWER" "/sbin/init.d/$APP_NAME" + do + rm -f $i + done + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + elif [ "$DIST_OS" = "aix" ] ; then + eval echo 'Detected AIX:' + if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + for i in "/etc/rc.d/rc2.d/S20$APP_NAME_LOWER" "/etc/rc.d/rc2.d/K20$APP_NAME_LOWER" "/etc/rc.d/init.d/$APP_NAME" + do + rm -f $i + done + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + elif [ "$DIST_OS" = "freebsd" ] ; then + eval echo 'Detected FreeBSD:' + if [ -f "/etc/rc.d/$APP_NAME" ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + for i in "/etc/rc.d/$APP_NAME" + do + rm -f $i + done + sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + elif [ "$DIST_OS" = "macosx" ] ; then + eval echo 'Detected Mac OSX:' + if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + # Make sure the plist is installed + LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}` + if [ "X${LOADED_PLIST}" != "X" ] ; then + launchctl unload "/Library/LaunchDaemons/${APP_PLIST}" + fi + rm -f "/Library/LaunchDaemons/${APP_PLIST}" + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + elif [ "$DIST_OS" = "zos" ] ; then + eval echo 'Detected z/OS:' + if [ -f /etc/rc.bak ] ; then + eval echo ' Removing $APP_LONG_NAME daemon...' + cp /etc/rc /etc/rc.bak + sed "s/_BPX_JOBNAME=\'APP_NAME\'.*//g" /etc/rc.bak > /etc/rc + rm /etc/rc.bak + else + eval echo ' The $APP_LONG_NAME daemon is not currently installed.' + exit 1 + fi + else + eval echo 'Remove not currently supported for $DIST_OS' + exit 1 + fi + fi +} + +dump() { + eval echo 'Dumping $APP_LONG_NAME...' + getpid + if [ "X$pid" = "X" ] + then + eval echo '$APP_LONG_NAME was not running.' + else + kill -3 $pid + + if [ $? -ne 0 ] + then + eval echo 'Failed to dump $APP_LONG_NAME.' + exit 1 + else + eval echo 'Dumped $APP_LONG_NAME.' + fi + fi +} + +# Used by HP-UX init scripts. +startmsg() { + getpid + if [ "X$pid" = "X" ] + then + eval echo 'Starting $APP_LONG_NAME... Wrapper:Stopped' + else + if [ "X$DETAIL_STATUS" = "X" ] + then + eval echo 'Starting $APP_LONG_NAME... Wrapper:Running' + else + getstatus + eval echo 'Starting $APP_LONG_NAME... Wrapper:$STATUS, Java:$JAVASTATUS' + fi + fi +} + +# Used by HP-UX init scripts. +stopmsg() { + getpid + if [ "X$pid" = "X" ] + then + eval echo 'Stopping $APP_LONG_NAME... Wrapper:Stopped' + else + if [ "X$DETAIL_STATUS" = "X" ] + then + eval echo 'Stopping $APP_LONG_NAME... Wrapper:Running' + else + getstatus + eval echo 'Stopping $APP_LONG_NAME... Wrapper:$STATUS, Java:$JAVASTATUS' + fi + fi +} + +case "$1" in + + 'console') + checkUser touchlock $1 + console + ;; + + 'start') + if [ "$DIST_OS" = "macosx" -a -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then + macosxstart + else + checkUser touchlock $1 + start + fi + ;; + + 'stop') + checkUser "" $1 + stopit "0" + ;; + + 'restart') + checkUser touchlock $1 + stopit "0" + start + ;; + + 'condrestart') + checkUser touchlock $1 + stopit "1" + start + ;; + + 'status') + checkUser "" $1 + status + ;; + + 'install') + installdaemon + ;; + + 'remove') + removedaemon + ;; + + 'dump') + checkUser "" $1 + dump + ;; + + 'start_msg') + # Internal command called by launchd on HP-UX. + checkUser "" $1 + startmsg + ;; + + 'stop_msg') + # Internal command called by launchd on HP-UX. + checkUser "" $1 + stopmsg + ;; + + 'launchdinternal') + # Internal command called by launchd on Max OSX. + # We do not want to call checkUser here as it is handled in the launchd plist file. Doing it here would confuse launchd. + launchdinternal + ;; + + *) + eval MSG=`gettext 'Usage: '` + echo "${MSG} $0 { console | start | stop | restart | condrestart | status | install | remove | dump }" + exit 1 + ;; +esac + +exit 0 From 6eba859e30d282f29fc34a20c295533bb729fa08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20=27Morty=27=20Str=C3=BCbe?= Date: Mon, 21 Jan 2013 12:28:17 +0100 Subject: [PATCH 2/2] Support running mulitple instances from the same path (e.g. using NFS). --- .../src/main/assembly/bin/tr.iwsn | 19 +- .../main/assembly/bin/tr.iwsn-linux-x86-32 | 1340 +--------------- .../main/assembly/bin/tr.iwsn-linux-x86-64 | 1340 +--------------- .../assembly/bin/tr.iwsn-macosx-universal-64 | 1342 +---------------- 4 files changed, 17 insertions(+), 4024 deletions(-) diff --git a/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn index b546fe770..23dc6115e 100755 --- a/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn +++ b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn @@ -1,4 +1,4 @@ -#!/bin/bash +#! /bin/bash # # Copyright (c) 1999, 2010 Tanuki Software, Ltd. @@ -18,12 +18,19 @@ # These settings can be modified to fit the needs of your application # Optimized for use with version 3.5.2 of the Wrapper. +#Parameters +WRAPPER_PARA="" +WRAPPER_PARA="wrapper.logfile=../logs/tr.iwsn.$HOSTNAME.log" + + # Application APP_NAME="tr.iwsn" APP_LONG_NAME="Testbed Runtime iWSN" # Wrapper -WRAPPER_CMD="../lib/wrapper" +if [[ -z "$WRAPPER_CMD" ]] ; then WRAPPER_CMD="../lib/wrapper"; fi + + WRAPPER_CONF="../conf/tr.iwsn.conf" # Priority at which to run the wrapper. See "man nice" for valid priorities. @@ -31,7 +38,7 @@ WRAPPER_CONF="../conf/tr.iwsn.conf" PRIORITY= # Location of the pid file. -PIDDIR="." +PIDDIR="/tmp" # 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 @@ -682,7 +689,7 @@ launchdinternal() { 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" + 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 $WRAPPER_PARA $ANCHORPROP $IGNOREPROP $STATUSPROP $LOCKPROP" eval $COMMAND_LINE else eval echo '$APP_LONG_NAME is already running.' @@ -702,7 +709,7 @@ console() { then trap '' 3 # 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" + 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_PARA $ANCHORPROP $STATUSPROP $LOCKPROP" eval $COMMAND_LINE else eval echo '$APP_LONG_NAME is already running.' @@ -803,7 +810,7 @@ start() { 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" + 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 $WRAPPER_PARA $ANCHORPROP $IGNOREPROP $STATUSPROP $LOCKPROP" eval $COMMAND_LINE else eval echo '$APP_LONG_NAME is already running.' diff --git a/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-linux-x86-32 b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-linux-x86-32 index a4c7c9d40..7939289f5 100755 --- a/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-linux-x86-32 +++ b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-linux-x86-32 @@ -1,1343 +1,5 @@ #!/bin/bash -# -# Copyright (c) 1999, 2010 Tanuki Software, Ltd. -# http://www.tanukisoftware.com -# All rights reserved. -# -# This software is the proprietary information of Tanuki Software. -# You shall use it only in accordance with the terms of the -# license agreement you entered into with Tanuki Software. -# http://wrapper.tanukisoftware.com/doc/english/licenseOverview.html -# -# 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 -# Optimized for use with version 3.5.2 of the Wrapper. - -# Application -APP_NAME="tr.iwsn" -APP_LONG_NAME="Testbed Runtime iWSN" - # Wrapper WRAPPER_CMD="../lib/wrapper-linux-x86-32" -WRAPPER_CONF="../conf/tr.iwsn.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, wait for the wrapper to report that the daemon has started -WAIT_FOR_STARTED_STATUS=true -WAIT_FOR_STARTED_TIMEOUT=120 - -# 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@ - -# When installing on On Mac OSX platforms, the following domain will be used to -# prefix the plist file name. -PLIST_DOMAIN=org.tanukisoftware.wrapper - -# 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 -#----------------------------------------------------------------------------- - -# Required for HP-UX Startup -if [ `uname -s` = "HP-UX" -o `uname -s` = "HP-UX64" ] ; then - PATH=$PATH:/usr/bin -fi - -# 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/ucb/ps" - if [ ! -x "$PSEXE" ] - then - PSEXE="/usr/bin/ps" - if [ ! -x "$PSEXE" ] - then - PSEXE="/bin/ps" - if [ ! -x "$PSEXE" ] - then - eval echo 'Unable to locate "ps".' - eval echo 'Please report this message along with the location of the command on your system.' - exit 1 - fi - fi - fi - -# Resolve the os -DIST_OS=`uname -s | tr [A-Z] [a-z] | tr -d ' '` -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" - ;; - 'os/390') - DIST_OS="zos" - ;; -esac - -# Resolve the architecture -if [ "$DIST_OS" = "macosx" ] -then - OS_VER=`sw_vers | grep 'ProductVersion:' | grep -o '[0-9]*\.[0-9]*\.[0-9]*'` - DIST_ARCH="universal" - if [[ "$OS_VER" < "10.5.0" ]] - then - DIST_BITS="32" - else - DIST_BITS="64" - fi - APP_PLIST_BASE=${PLIST_DOMAIN}.${APP_NAME} - APP_PLIST=${APP_PLIST_BASE}.plist -else - DIST_ARCH= - DIST_ARCH=`uname -p 2>/dev/null | tr [A-Z] [a-z] | tr -d ' '` - if [ "X$DIST_ARCH" = "X" ] - then - DIST_ARCH="unknown" - fi - if [ "$DIST_ARCH" = "unknown" ] - then - DIST_ARCH=`uname -m 2>/dev/null | tr [A-Z] [a-z] | tr -d ' '` - fi - case "$DIST_ARCH" in - 'athlon' | 'i386' | 'i486' | 'i586' | 'i686') - DIST_ARCH="x86" - if [ "${DIST_OS}" = "solaris" ] ; then - DIST_BITS=`isainfo -b` - else - DIST_BITS="32" - fi - ;; - 'amd64' | 'x86_64') - DIST_ARCH="x86" - DIST_BITS="64" - ;; - 'ia32') - DIST_ARCH="ia" - DIST_BITS="32" - ;; - 'ia64' | 'ia64n' | 'ia64w') - DIST_ARCH="ia" - DIST_BITS="64" - ;; - 'ip27') - DIST_ARCH="mips" - DIST_BITS="32" - ;; - 'power' | 'powerpc' | 'power_pc' | 'ppc64') - if [ "${DIST_ARCH}" = "ppc64" ] ; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - DIST_ARCH="ppc" - if [ "${DIST_OS}" = "aix" ] ; then - if [ `getconf KERNEL_BITMODE` -eq 64 ]; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - fi - ;; - 'pa_risc' | 'pa-risc') - DIST_ARCH="parisc" - if [ `getconf KERNEL_BITS` -eq 64 ]; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - ;; - 'sun4u' | 'sparcv9' | 'sparc') - DIST_ARCH="sparc" - DIST_BITS=`isainfo -b` - ;; - '9000/800' | '9000/785') - DIST_ARCH="parisc" - if [ `getconf KERNEL_BITS` -eq 64 ]; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - ;; - '2097') - DIST_ARCH="390" - DIST_BITS="32" - ;; - 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 - -# Test Echo -ECHOTEST=`echo -n "x"` -if [ "$ECHOTEST" = "x" ] -then - ECHOOPT="-n " -else - ECHOOPT="" -fi - - -gettext() { - echo $1 -} - -outputFile() { - if [ -f "$1" ] - then - eval echo ' $1 Found but not executable.'; - else - echo " $1" - fi -} - -# Decide on the wrapper binary to use. -# If the bits of the OS could be detected, we will try to look for the -# binary with the correct bits value. If it doesn't exist, fall back -# and look for the 32-bit binary. If that doesn't exist either then -# look for the default. -WRAPPER_TEST_CMD="" -if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" ] -then - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" - if [ ! -x "$WRAPPER_TEST_CMD" ] - then - chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null - fi - if [ -x "$WRAPPER_TEST_CMD" ] - then - WRAPPER_CMD="$WRAPPER_TEST_CMD" - else - outputFile "$WRAPPER_TEST_CMD" - WRAPPER_TEST_CMD="" - fi -fi -if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" -a -z "$WRAPPER_TEST_CMD" ] -then - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" - if [ ! -x "$WRAPPER_TEST_CMD" ] - then - chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null - fi - if [ -x "$WRAPPER_TEST_CMD" ] - then - WRAPPER_CMD="$WRAPPER_TEST_CMD" - else - outputFile "$WRAPPER_TEST_CMD" - WRAPPER_TEST_CMD="" - fi -fi -if [ -f "$WRAPPER_CMD" -a -z "$WRAPPER_TEST_CMD" ] -then - WRAPPER_TEST_CMD="$WRAPPER_CMD" - if [ ! -x "$WRAPPER_TEST_CMD" ] - then - chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null - fi - if [ -x "$WRAPPER_TEST_CMD" ] - then - WRAPPER_CMD="$WRAPPER_TEST_CMD" - else - outputFile "$WRAPPER_TEST_CMD" - WRAPPER_TEST_CMD="" - fi -fi -if [ -z $WRAPPER_TEST_CMD ] -then - echo "Unable to locate any of the following binaries:" - outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" - if [ ! "$DIST_BITS" = "32" ] - then - outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" - fi - outputFile "$WRAPPER_CMD" - - exit 1 -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$WAIT_FOR_STARTED_STATUS" = "X" ] -then - STATUSPROP= -else - STATUSPROP="wrapper.statusfile=\"$STATUSFILE\" wrapper.java.statusfile=\"$JAVASTATUSFILE\"" -fi - -if [ ! -n "$WAIT_FOR_STARTED_STATUS" ] -then - WAIT_FOR_STARTED_STATUS=true -fi - -if [ $WAIT_FOR_STARTED_STATUS = true ] ; then - DETAIL_STATUS=true -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 - eval echo 'Unable to locate "id".' - eval 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 - 'freebsd') - pidtest=`$PSEXE -p $pid -o args | tail -1` - if [ "X$pidtest" = "XCOMMAND" ] - then - pidtest="" - fi - ;; - 'macosx') - pidtest=`$PSEXE -ww -p $pid -o command | grep "$WRAPPER_CMD" | tail -1` - ;; - 'solaris') - if [ -f "/usr/bin/pargs" ] - then - pidtest=`pargs $pid | grep "$WRAPPER_CMD" | tail -1` - else - case "$PSEXE" in - '/usr/ucb/ps') - pidtest=`$PSEXE -auxww $pid | grep "$WRAPPER_CMD" | tail -1` - ;; - '/usr/bin/ps') - TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1` - COUNT=`echo $TRUNCATED_CMD | wc -m` - COUNT=`echo ${COUNT}` - COUNT=`expr $COUNT - 1` - TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT` - pidtest=`$PSEXE -o comm -p $pid | grep "$TRUNCATED_CMD" | tail -1` - ;; - '/bin/ps') - TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1` - COUNT=`echo $TRUNCATED_CMD | wc -m` - COUNT=`echo ${COUNT}` - COUNT=`expr $COUNT - 1` - TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT` - pidtest=`$PSEXE -o comm -p $pid | grep "$TRUNCATED_CMD" | tail -1` - ;; - *) - echo "Unsupported ps command $PSEXE" - exit 1 - ;; - esac - fi - ;; - 'hpux') - pidtest=`$PSEXE -p $pid -x -o args | 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" - eval echo 'Removed stale pid file: $PIDFILE' - pid="" - fi - fi - else - eval 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() { - case "$DIST_OS" in - 'solaris') - case "$PSEXE" in - '/usr/ucb/ps') - pid=`$PSEXE $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` - ;; - '/usr/bin/ps') - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` - ;; - '/bin/ps') - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` - ;; - *) - echo "Unsupported ps command $PSEXE" - exit 1 - ;; - esac - ;; - *) - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` 2>/dev/null - ;; - esac - if [ "X$pid" = "X" ] - then - # Process is gone so remove the pid file. - rm -f "$PIDFILE" - pid="" - fi -} - -launchdtrap() { - stopit - exit -} - -waitforwrapperstop() { - getpid - while [ "X$pid" != "X" ] ; do - sleep 1 - getpid - done -} - -launchdinternal() { - getpid - trap launchdtrap TERM - 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 - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi - # launchd expects that this script stay up and running so we need to do our own monitoring of the Wrapper process. - if [ $WAIT_FOR_STARTED_STATUS = true ] - then - waitforwrapperstop - fi -} - -console() { - eval echo 'Running $APP_LONG_NAME...' - getpid - if [ "X$pid" = "X" ] - then - trap '' 3 - # 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 - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi -} - -waitforjavastartup() { - getstatus - eval echo $ECHOOPT `gettext 'Waiting for $APP_LONG_NAME...'` - - # Wait until the timeout or we have something besides Unknown. - counter=15 - while [ "$JAVASTATUS" = "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do - echo $ECHOOPT"." - sleep 1 - getstatus - counter=`expr $counter - 1` - done - - if [ -n "$WAIT_FOR_STARTED_TIMEOUT" ] ; then - counter=$WAIT_FOR_STARTED_TIMEOUT - else - counter=120 - fi - while [ "$JAVASTATUS" != "STARTED" -a "$JAVASTATUS" != "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do - echo $ECHOOPT"." - sleep 1 - getstatus - counter=`expr $counter - 1` - done - if [ "X$ECHOOPT" != "X" ] ; then - echo "" - fi -} - -startwait() { - if [ $WAIT_FOR_STARTED_STATUS = true ] - then - waitforjavastartup - 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 $ECHOOPT"." - i=`expr $i + 1` - done - if [ $WAIT_AFTER_STARTUP -gt 0 -o $WAIT_FOR_STARTED_STATUS = true ] - then - getpid - if [ "X$pid" = "X" ] - then - eval echo ' WARNING: $APP_LONG_NAME may have failed to start.' - exit 1 - else - eval echo ' running: PID:$pid' - fi - else - echo "" - fi -} - -macosxstart() { - # The daemon has been installed. - eval echo 'Starting $APP_LONG_NAME. Detected Mac OSX and installed launchd daemon.' - if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then - eval echo 'Must be root to perform this action.' - exit 1 - fi - - getpid - if [ "X$pid" != "X" ] ; then - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi - - # If the daemon was just installed, it may not be loaded. - LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}` - if [ "X${LOADED_PLIST}" = "X" ] ; then - launchctl load /Library/LaunchDaemons/${APP_PLIST} - fi - # If launchd is set to run the daemon already at Load, we don't need to call start - getpid - if [ "X$pid" == "X" ] ; then - launchctl start ${APP_PLIST_BASE} - fi - - startwait -} - -start() { - eval echo $ECHOOPT `gettext '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 - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi - - startwait -} - -stopit() { - # $1 exit if down flag - - eval echo 'Stopping $APP_LONG_NAME...' - getpid - if [ "X$pid" = "X" ] - then - eval echo '$APP_LONG_NAME was not running.' - if [ "X$1" = "X1" ] - then - exit 1 - fi - 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 - eval 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 - eval 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 - eval 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 - eval echo 'Failed to stop $APP_LONG_NAME.' - exit 1 - else - eval echo 'Stopped $APP_LONG_NAME.' - fi - fi -} - -status() { - getpid - if [ "X$pid" = "X" ] - then - eval echo '$APP_LONG_NAME is not running.' - exit 1 - else - if [ "X$DETAIL_STATUS" = "X" ] - then - eval echo '$APP_LONG_NAME is running: PID:$pid' - else - getstatus - eval echo '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS' - fi - exit 0 - fi -} - -installdaemon() { - if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then - eval echo 'Must be root to perform this action.' - exit 1 - else - APP_NAME_LOWER=`echo "$APP_NAME" | tr [A-Z] [a-z]` - if [ "$DIST_OS" = "solaris" ] ; then - eval echo 'Detected Solaris:' - if [ -f /etc/init.d/$APP_NAME ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER" - fi - elif [ "$DIST_OS" = "linux" ] ; then - if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then - eval echo 'Detected RHEL or Fedora:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - /sbin/chkconfig --add "$APP_NAME" - /sbin/chkconfig "$APP_NAME" on - fi - elif [ -f /etc/SuSE-release ] ; then - eval echo 'Detected SuSE or SLES:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - insserv "/etc/init.d/$APP_NAME" - fi - elif [ -f /etc/lsb-release ] ; then - eval echo 'Detected Ubuntu:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - update-rc.d "$APP_NAME" defaults - fi - else - eval echo 'Detected Linux:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" /etc/init.d/$APP_NAME - ln -s "/etc/init.d/$APP_NAME" "/etc/rc2.d/K20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc2.d/S20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/K20$APP_NAME_LOWER" - fi - fi - elif [ "$DIST_OS" = "hpux" ] ; then - eval echo 'Detected HP-UX:' - if [ -f "/sbin/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/sbin/init.d/$APP_NAME" - ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/K20$APP_NAME_LOWER" - ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/S20$APP_NAME_LOWER" - fi - elif [ "$DIST_OS" = "aix" ] ; then - eval echo 'Detected AIX:' - if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" /etc/rc.d/init.d/$APP_NAME - ln -s "/etc/rc.d/init.d/$APP_NAME" "/etc/rc.d/rc2.d/S20$APP_NAME_LOWER" - ln -s "/etc/rc.d/init.d/$APP_NAME" "/etc/rc.d/rc2.d/K20$APP_NAME_LOWER" - fi - elif [ "$DIST_OS" = "freebsd" ] ; then - eval echo 'Detected FreeBSD:' - if [ -f "/etc/rc.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf - if [ -f "${REALDIR}/${APP_NAME}.install" ] ; then - ln -s "${REALDIR}/${APP_NAME}.install" "/etc/rc.d/$APP_NAME" - else - echo '#!/bin/sh' > "/etc/rc.d/$APP_NAME" - echo "#" >> "/etc/rc.d/$APP_NAME" - echo "# PROVIDE: $APP_NAME" >> "/etc/rc.d/$APP_NAME" - echo "# REQUIRE: NETWORKING" >> "/etc/rc.d/$APP_NAME" - echo "# KEYWORD: shutdown" >> "/etc/rc.d/$APP_NAME" - echo ". /etc/rc.subr" >> "/etc/rc.d/$APP_NAME" - echo "name=\"$APP_NAME\"" >> "/etc/rc.d/$APP_NAME" - echo "rcvar=\`set_rcvar\`" >> "/etc/rc.d/$APP_NAME" - echo "command=\"${REALDIR}/${APP_NAME}\"" >> "/etc/rc.d/$APP_NAME" - echo 'start_cmd="${name}_start"' >> "/etc/rc.d/$APP_NAME" - echo 'load_rc_config $name' >> "/etc/rc.d/$APP_NAME" - echo 'status_cmd="${name}_status"' >> "/etc/rc.d/$APP_NAME" - echo 'stop_cmd="${name}_stop"' >> "/etc/rc.d/$APP_NAME" - echo "${APP_NAME}_status() {" >> "/etc/rc.d/$APP_NAME" - echo '${command} status' >> "/etc/rc.d/$APP_NAME" - echo '}' >> "/etc/rc.d/$APP_NAME" - echo "${APP_NAME}_stop() {" >> "/etc/rc.d/$APP_NAME" - echo '${command} stop' >> "/etc/rc.d/$APP_NAME" - echo '}' >> "/etc/rc.d/$APP_NAME" - echo "${APP_NAME}_start() {" >> "/etc/rc.d/$APP_NAME" - echo '${command} start' >> "/etc/rc.d/$APP_NAME" - echo '}' >> "/etc/rc.d/$APP_NAME" - echo 'run_rc_command "$1"' >> "/etc/rc.d/$APP_NAME" - fi - echo "${APP_NAME}_enable=\"YES\"" >> /etc/rc.conf - chmod 555 "/etc/rc.d/$APP_NAME" - fi - elif [ "$DIST_OS" = "macosx" ] ; then - eval echo 'Detected Mac OSX:' - if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - if [ -f "${REALDIR}/${APP_PLIST}" ] ; then - ln -s "${REALDIR}/${APP_PLIST}" "/Library/LaunchDaemons/${APP_PLIST}" - else - echo "" > "/Library/LaunchDaemons/${APP_PLIST}" - echo "> "/Library/LaunchDaemons/${APP_PLIST}" - echo "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo "" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " Label" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ${APP_PLIST_BASE}" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ProgramArguments" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ${REALDIR}/${APP_NAME}" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " launchdinternal" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " OnDemand" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " RunAtLoad" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - if [ "X$RUN_AS_USER" != "X" ] ; then - echo " UserName" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ${RUN_AS_USER}" >> "/Library/LaunchDaemons/${APP_PLIST}" - fi - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo "" >> "/Library/LaunchDaemons/${APP_PLIST}" - fi - chmod 555 "/Library/LaunchDaemons/${APP_PLIST}" - fi - elif [ "$DIST_OS" = "zos" ] ; then - eval echo 'Detected z/OS:' - if [ -f /etc/rc.bak ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - cp /etc/rc /etc/rc.bak - sed "s:echo /etc/rc script executed, \`date\`::g" /etc/rc.bak > /etc/rc - echo "_BPX_JOBNAME='${APP_NAME}' \"${REALDIR}/${APP_NAME}\" start" >>/etc/rc - echo '/etc/rc script executed, `date`' >>/etc/rc - fi - else - eval echo 'Install not currently supported for $DIST_OS' - exit 1 - fi - fi -} - -removedaemon() { - if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then - eval echo 'Must be root to perform this action.' - exit 1 - else - stopit "0" - APP_NAME_LOWER=`echo "$APP_NAME" | tr [A-Z] [a-z]` - if [ "$DIST_OS" = "solaris" ] ; then - eval echo 'Detected Solaris:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "linux" ] ; then - if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then - eval echo 'Detected RHEL or Fedora:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - /sbin/chkconfig "$APP_NAME" off - /sbin/chkconfig --del "$APP_NAME" - rm -f "/etc/init.d/$APP_NAME" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ -f /etc/SuSE-release ] ; then - eval echo 'Detected SuSE or SLES:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - insserv -r "/etc/init.d/$APP_NAME" - rm -f "/etc/init.d/$APP_NAME" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ -f /etc/lsb-release ] ; then - eval echo 'Detected Ubuntu:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - update-rc.d -f "$APP_NAME" remove - rm -f "/etc/init.d/$APP_NAME" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - else - eval echo 'Detected Linux:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc2.d/S20$APP_NAME_LOWER" "/etc/rc2.d/K20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/rc5.d/K20$APP_NAME_LOWER" "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - fi - elif [ "$DIST_OS" = "hpux" ] ; then - eval echo 'Detected HP-UX:' - if [ -f "/sbin/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/sbin/rc3.d/K20$APP_NAME_LOWER" "/sbin/rc3.d/S20$APP_NAME_LOWER" "/sbin/init.d/$APP_NAME" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "aix" ] ; then - eval echo 'Detected AIX:' - if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc.d/rc2.d/S20$APP_NAME_LOWER" "/etc/rc.d/rc2.d/K20$APP_NAME_LOWER" "/etc/rc.d/init.d/$APP_NAME" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "freebsd" ] ; then - eval echo 'Detected FreeBSD:' - if [ -f "/etc/rc.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc.d/$APP_NAME" - do - rm -f $i - done - sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "macosx" ] ; then - eval echo 'Detected Mac OSX:' - if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - # Make sure the plist is installed - LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}` - if [ "X${LOADED_PLIST}" != "X" ] ; then - launchctl unload "/Library/LaunchDaemons/${APP_PLIST}" - fi - rm -f "/Library/LaunchDaemons/${APP_PLIST}" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "zos" ] ; then - eval echo 'Detected z/OS:' - if [ -f /etc/rc.bak ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - cp /etc/rc /etc/rc.bak - sed "s/_BPX_JOBNAME=\'APP_NAME\'.*//g" /etc/rc.bak > /etc/rc - rm /etc/rc.bak - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - else - eval echo 'Remove not currently supported for $DIST_OS' - exit 1 - fi - fi -} - -dump() { - eval echo 'Dumping $APP_LONG_NAME...' - getpid - if [ "X$pid" = "X" ] - then - eval echo '$APP_LONG_NAME was not running.' - else - kill -3 $pid - - if [ $? -ne 0 ] - then - eval echo 'Failed to dump $APP_LONG_NAME.' - exit 1 - else - eval echo 'Dumped $APP_LONG_NAME.' - fi - fi -} - -# Used by HP-UX init scripts. -startmsg() { - getpid - if [ "X$pid" = "X" ] - then - eval echo 'Starting $APP_LONG_NAME... Wrapper:Stopped' - else - if [ "X$DETAIL_STATUS" = "X" ] - then - eval echo 'Starting $APP_LONG_NAME... Wrapper:Running' - else - getstatus - eval echo 'Starting $APP_LONG_NAME... Wrapper:$STATUS, Java:$JAVASTATUS' - fi - fi -} - -# Used by HP-UX init scripts. -stopmsg() { - getpid - if [ "X$pid" = "X" ] - then - eval echo 'Stopping $APP_LONG_NAME... Wrapper:Stopped' - else - if [ "X$DETAIL_STATUS" = "X" ] - then - eval echo 'Stopping $APP_LONG_NAME... Wrapper:Running' - else - getstatus - eval echo 'Stopping $APP_LONG_NAME... Wrapper:$STATUS, Java:$JAVASTATUS' - fi - fi -} - -case "$1" in - - 'console') - checkUser touchlock $1 - console - ;; - - 'start') - if [ "$DIST_OS" = "macosx" -a -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then - macosxstart - else - checkUser touchlock $1 - start - fi - ;; - - 'stop') - checkUser "" $1 - stopit "0" - ;; - - 'restart') - checkUser touchlock $1 - stopit "0" - start - ;; - - 'condrestart') - checkUser touchlock $1 - stopit "1" - start - ;; - - 'status') - checkUser "" $1 - status - ;; - - 'install') - installdaemon - ;; - - 'remove') - removedaemon - ;; - - 'dump') - checkUser "" $1 - dump - ;; - - 'start_msg') - # Internal command called by launchd on HP-UX. - checkUser "" $1 - startmsg - ;; - - 'stop_msg') - # Internal command called by launchd on HP-UX. - checkUser "" $1 - stopmsg - ;; - - 'launchdinternal') - # Internal command called by launchd on Max OSX. - # We do not want to call checkUser here as it is handled in the launchd plist file. Doing it here would confuse launchd. - launchdinternal - ;; - - *) - eval MSG=`gettext 'Usage: '` - echo "${MSG} $0 { console | start | stop | restart | condrestart | status | install | remove | dump }" - exit 1 - ;; -esac - -exit 0 +source tr.iwsn diff --git a/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-linux-x86-64 b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-linux-x86-64 index 61cd7abe5..4cb94880a 100755 --- a/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-linux-x86-64 +++ b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-linux-x86-64 @@ -1,1343 +1,5 @@ #!/bin/bash -# -# Copyright (c) 1999, 2010 Tanuki Software, Ltd. -# http://www.tanukisoftware.com -# All rights reserved. -# -# This software is the proprietary information of Tanuki Software. -# You shall use it only in accordance with the terms of the -# license agreement you entered into with Tanuki Software. -# http://wrapper.tanukisoftware.com/doc/english/licenseOverview.html -# -# 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 -# Optimized for use with version 3.5.2 of the Wrapper. - -# Application -APP_NAME="tr.iwsn" -APP_LONG_NAME="Testbed Runtime iWSN" - # Wrapper WRAPPER_CMD="../lib/wrapper-linux-x86-64" -WRAPPER_CONF="../conf/tr.iwsn.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, wait for the wrapper to report that the daemon has started -WAIT_FOR_STARTED_STATUS=true -WAIT_FOR_STARTED_TIMEOUT=120 - -# 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@ - -# When installing on On Mac OSX platforms, the following domain will be used to -# prefix the plist file name. -PLIST_DOMAIN=org.tanukisoftware.wrapper - -# 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 -#----------------------------------------------------------------------------- - -# Required for HP-UX Startup -if [ `uname -s` = "HP-UX" -o `uname -s` = "HP-UX64" ] ; then - PATH=$PATH:/usr/bin -fi - -# 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/ucb/ps" - if [ ! -x "$PSEXE" ] - then - PSEXE="/usr/bin/ps" - if [ ! -x "$PSEXE" ] - then - PSEXE="/bin/ps" - if [ ! -x "$PSEXE" ] - then - eval echo 'Unable to locate "ps".' - eval echo 'Please report this message along with the location of the command on your system.' - exit 1 - fi - fi - fi - -# Resolve the os -DIST_OS=`uname -s | tr [A-Z] [a-z] | tr -d ' '` -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" - ;; - 'os/390') - DIST_OS="zos" - ;; -esac - -# Resolve the architecture -if [ "$DIST_OS" = "macosx" ] -then - OS_VER=`sw_vers | grep 'ProductVersion:' | grep -o '[0-9]*\.[0-9]*\.[0-9]*'` - DIST_ARCH="universal" - if [[ "$OS_VER" < "10.5.0" ]] - then - DIST_BITS="32" - else - DIST_BITS="64" - fi - APP_PLIST_BASE=${PLIST_DOMAIN}.${APP_NAME} - APP_PLIST=${APP_PLIST_BASE}.plist -else - DIST_ARCH= - DIST_ARCH=`uname -p 2>/dev/null | tr [A-Z] [a-z] | tr -d ' '` - if [ "X$DIST_ARCH" = "X" ] - then - DIST_ARCH="unknown" - fi - if [ "$DIST_ARCH" = "unknown" ] - then - DIST_ARCH=`uname -m 2>/dev/null | tr [A-Z] [a-z] | tr -d ' '` - fi - case "$DIST_ARCH" in - 'athlon' | 'i386' | 'i486' | 'i586' | 'i686') - DIST_ARCH="x86" - if [ "${DIST_OS}" = "solaris" ] ; then - DIST_BITS=`isainfo -b` - else - DIST_BITS="32" - fi - ;; - 'amd64' | 'x86_64') - DIST_ARCH="x86" - DIST_BITS="64" - ;; - 'ia32') - DIST_ARCH="ia" - DIST_BITS="32" - ;; - 'ia64' | 'ia64n' | 'ia64w') - DIST_ARCH="ia" - DIST_BITS="64" - ;; - 'ip27') - DIST_ARCH="mips" - DIST_BITS="32" - ;; - 'power' | 'powerpc' | 'power_pc' | 'ppc64') - if [ "${DIST_ARCH}" = "ppc64" ] ; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - DIST_ARCH="ppc" - if [ "${DIST_OS}" = "aix" ] ; then - if [ `getconf KERNEL_BITMODE` -eq 64 ]; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - fi - ;; - 'pa_risc' | 'pa-risc') - DIST_ARCH="parisc" - if [ `getconf KERNEL_BITS` -eq 64 ]; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - ;; - 'sun4u' | 'sparcv9' | 'sparc') - DIST_ARCH="sparc" - DIST_BITS=`isainfo -b` - ;; - '9000/800' | '9000/785') - DIST_ARCH="parisc" - if [ `getconf KERNEL_BITS` -eq 64 ]; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - ;; - '2097') - DIST_ARCH="390" - DIST_BITS="32" - ;; - 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 - -# Test Echo -ECHOTEST=`echo -n "x"` -if [ "$ECHOTEST" = "x" ] -then - ECHOOPT="-n " -else - ECHOOPT="" -fi - - -gettext() { - echo $1 -} - -outputFile() { - if [ -f "$1" ] - then - eval echo ' $1 Found but not executable.'; - else - echo " $1" - fi -} - -# Decide on the wrapper binary to use. -# If the bits of the OS could be detected, we will try to look for the -# binary with the correct bits value. If it doesn't exist, fall back -# and look for the 32-bit binary. If that doesn't exist either then -# look for the default. -WRAPPER_TEST_CMD="" -if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" ] -then - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" - if [ ! -x "$WRAPPER_TEST_CMD" ] - then - chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null - fi - if [ -x "$WRAPPER_TEST_CMD" ] - then - WRAPPER_CMD="$WRAPPER_TEST_CMD" - else - outputFile "$WRAPPER_TEST_CMD" - WRAPPER_TEST_CMD="" - fi -fi -if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" -a -z "$WRAPPER_TEST_CMD" ] -then - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" - if [ ! -x "$WRAPPER_TEST_CMD" ] - then - chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null - fi - if [ -x "$WRAPPER_TEST_CMD" ] - then - WRAPPER_CMD="$WRAPPER_TEST_CMD" - else - outputFile "$WRAPPER_TEST_CMD" - WRAPPER_TEST_CMD="" - fi -fi -if [ -f "$WRAPPER_CMD" -a -z "$WRAPPER_TEST_CMD" ] -then - WRAPPER_TEST_CMD="$WRAPPER_CMD" - if [ ! -x "$WRAPPER_TEST_CMD" ] - then - chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null - fi - if [ -x "$WRAPPER_TEST_CMD" ] - then - WRAPPER_CMD="$WRAPPER_TEST_CMD" - else - outputFile "$WRAPPER_TEST_CMD" - WRAPPER_TEST_CMD="" - fi -fi -if [ -z $WRAPPER_TEST_CMD ] -then - echo "Unable to locate any of the following binaries:" - outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" - if [ ! "$DIST_BITS" = "32" ] - then - outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" - fi - outputFile "$WRAPPER_CMD" - - exit 1 -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$WAIT_FOR_STARTED_STATUS" = "X" ] -then - STATUSPROP= -else - STATUSPROP="wrapper.statusfile=\"$STATUSFILE\" wrapper.java.statusfile=\"$JAVASTATUSFILE\"" -fi - -if [ ! -n "$WAIT_FOR_STARTED_STATUS" ] -then - WAIT_FOR_STARTED_STATUS=true -fi - -if [ $WAIT_FOR_STARTED_STATUS = true ] ; then - DETAIL_STATUS=true -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 - eval echo 'Unable to locate "id".' - eval 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 - 'freebsd') - pidtest=`$PSEXE -p $pid -o args | tail -1` - if [ "X$pidtest" = "XCOMMAND" ] - then - pidtest="" - fi - ;; - 'macosx') - pidtest=`$PSEXE -ww -p $pid -o command | grep "$WRAPPER_CMD" | tail -1` - ;; - 'solaris') - if [ -f "/usr/bin/pargs" ] - then - pidtest=`pargs $pid | grep "$WRAPPER_CMD" | tail -1` - else - case "$PSEXE" in - '/usr/ucb/ps') - pidtest=`$PSEXE -auxww $pid | grep "$WRAPPER_CMD" | tail -1` - ;; - '/usr/bin/ps') - TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1` - COUNT=`echo $TRUNCATED_CMD | wc -m` - COUNT=`echo ${COUNT}` - COUNT=`expr $COUNT - 1` - TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT` - pidtest=`$PSEXE -o comm -p $pid | grep "$TRUNCATED_CMD" | tail -1` - ;; - '/bin/ps') - TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1` - COUNT=`echo $TRUNCATED_CMD | wc -m` - COUNT=`echo ${COUNT}` - COUNT=`expr $COUNT - 1` - TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT` - pidtest=`$PSEXE -o comm -p $pid | grep "$TRUNCATED_CMD" | tail -1` - ;; - *) - echo "Unsupported ps command $PSEXE" - exit 1 - ;; - esac - fi - ;; - 'hpux') - pidtest=`$PSEXE -p $pid -x -o args | 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" - eval echo 'Removed stale pid file: $PIDFILE' - pid="" - fi - fi - else - eval 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() { - case "$DIST_OS" in - 'solaris') - case "$PSEXE" in - '/usr/ucb/ps') - pid=`$PSEXE $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` - ;; - '/usr/bin/ps') - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` - ;; - '/bin/ps') - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` - ;; - *) - echo "Unsupported ps command $PSEXE" - exit 1 - ;; - esac - ;; - *) - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` 2>/dev/null - ;; - esac - if [ "X$pid" = "X" ] - then - # Process is gone so remove the pid file. - rm -f "$PIDFILE" - pid="" - fi -} - -launchdtrap() { - stopit - exit -} - -waitforwrapperstop() { - getpid - while [ "X$pid" != "X" ] ; do - sleep 1 - getpid - done -} - -launchdinternal() { - getpid - trap launchdtrap TERM - 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 - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi - # launchd expects that this script stay up and running so we need to do our own monitoring of the Wrapper process. - if [ $WAIT_FOR_STARTED_STATUS = true ] - then - waitforwrapperstop - fi -} - -console() { - eval echo 'Running $APP_LONG_NAME...' - getpid - if [ "X$pid" = "X" ] - then - trap '' 3 - # 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 - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi -} - -waitforjavastartup() { - getstatus - eval echo $ECHOOPT `gettext 'Waiting for $APP_LONG_NAME...'` - - # Wait until the timeout or we have something besides Unknown. - counter=15 - while [ "$JAVASTATUS" = "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do - echo $ECHOOPT"." - sleep 1 - getstatus - counter=`expr $counter - 1` - done - - if [ -n "$WAIT_FOR_STARTED_TIMEOUT" ] ; then - counter=$WAIT_FOR_STARTED_TIMEOUT - else - counter=120 - fi - while [ "$JAVASTATUS" != "STARTED" -a "$JAVASTATUS" != "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do - echo $ECHOOPT"." - sleep 1 - getstatus - counter=`expr $counter - 1` - done - if [ "X$ECHOOPT" != "X" ] ; then - echo "" - fi -} - -startwait() { - if [ $WAIT_FOR_STARTED_STATUS = true ] - then - waitforjavastartup - 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 $ECHOOPT"." - i=`expr $i + 1` - done - if [ $WAIT_AFTER_STARTUP -gt 0 -o $WAIT_FOR_STARTED_STATUS = true ] - then - getpid - if [ "X$pid" = "X" ] - then - eval echo ' WARNING: $APP_LONG_NAME may have failed to start.' - exit 1 - else - eval echo ' running: PID:$pid' - fi - else - echo "" - fi -} - -macosxstart() { - # The daemon has been installed. - eval echo 'Starting $APP_LONG_NAME. Detected Mac OSX and installed launchd daemon.' - if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then - eval echo 'Must be root to perform this action.' - exit 1 - fi - - getpid - if [ "X$pid" != "X" ] ; then - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi - - # If the daemon was just installed, it may not be loaded. - LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}` - if [ "X${LOADED_PLIST}" = "X" ] ; then - launchctl load /Library/LaunchDaemons/${APP_PLIST} - fi - # If launchd is set to run the daemon already at Load, we don't need to call start - getpid - if [ "X$pid" == "X" ] ; then - launchctl start ${APP_PLIST_BASE} - fi - - startwait -} - -start() { - eval echo $ECHOOPT `gettext '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 - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi - - startwait -} - -stopit() { - # $1 exit if down flag - - eval echo 'Stopping $APP_LONG_NAME...' - getpid - if [ "X$pid" = "X" ] - then - eval echo '$APP_LONG_NAME was not running.' - if [ "X$1" = "X1" ] - then - exit 1 - fi - 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 - eval 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 - eval 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 - eval 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 - eval echo 'Failed to stop $APP_LONG_NAME.' - exit 1 - else - eval echo 'Stopped $APP_LONG_NAME.' - fi - fi -} - -status() { - getpid - if [ "X$pid" = "X" ] - then - eval echo '$APP_LONG_NAME is not running.' - exit 1 - else - if [ "X$DETAIL_STATUS" = "X" ] - then - eval echo '$APP_LONG_NAME is running: PID:$pid' - else - getstatus - eval echo '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS' - fi - exit 0 - fi -} - -installdaemon() { - if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then - eval echo 'Must be root to perform this action.' - exit 1 - else - APP_NAME_LOWER=`echo "$APP_NAME" | tr [A-Z] [a-z]` - if [ "$DIST_OS" = "solaris" ] ; then - eval echo 'Detected Solaris:' - if [ -f /etc/init.d/$APP_NAME ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER" - fi - elif [ "$DIST_OS" = "linux" ] ; then - if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then - eval echo 'Detected RHEL or Fedora:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - /sbin/chkconfig --add "$APP_NAME" - /sbin/chkconfig "$APP_NAME" on - fi - elif [ -f /etc/SuSE-release ] ; then - eval echo 'Detected SuSE or SLES:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - insserv "/etc/init.d/$APP_NAME" - fi - elif [ -f /etc/lsb-release ] ; then - eval echo 'Detected Ubuntu:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - update-rc.d "$APP_NAME" defaults - fi - else - eval echo 'Detected Linux:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" /etc/init.d/$APP_NAME - ln -s "/etc/init.d/$APP_NAME" "/etc/rc2.d/K20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc2.d/S20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/K20$APP_NAME_LOWER" - fi - fi - elif [ "$DIST_OS" = "hpux" ] ; then - eval echo 'Detected HP-UX:' - if [ -f "/sbin/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/sbin/init.d/$APP_NAME" - ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/K20$APP_NAME_LOWER" - ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/S20$APP_NAME_LOWER" - fi - elif [ "$DIST_OS" = "aix" ] ; then - eval echo 'Detected AIX:' - if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" /etc/rc.d/init.d/$APP_NAME - ln -s "/etc/rc.d/init.d/$APP_NAME" "/etc/rc.d/rc2.d/S20$APP_NAME_LOWER" - ln -s "/etc/rc.d/init.d/$APP_NAME" "/etc/rc.d/rc2.d/K20$APP_NAME_LOWER" - fi - elif [ "$DIST_OS" = "freebsd" ] ; then - eval echo 'Detected FreeBSD:' - if [ -f "/etc/rc.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf - if [ -f "${REALDIR}/${APP_NAME}.install" ] ; then - ln -s "${REALDIR}/${APP_NAME}.install" "/etc/rc.d/$APP_NAME" - else - echo '#!/bin/sh' > "/etc/rc.d/$APP_NAME" - echo "#" >> "/etc/rc.d/$APP_NAME" - echo "# PROVIDE: $APP_NAME" >> "/etc/rc.d/$APP_NAME" - echo "# REQUIRE: NETWORKING" >> "/etc/rc.d/$APP_NAME" - echo "# KEYWORD: shutdown" >> "/etc/rc.d/$APP_NAME" - echo ". /etc/rc.subr" >> "/etc/rc.d/$APP_NAME" - echo "name=\"$APP_NAME\"" >> "/etc/rc.d/$APP_NAME" - echo "rcvar=\`set_rcvar\`" >> "/etc/rc.d/$APP_NAME" - echo "command=\"${REALDIR}/${APP_NAME}\"" >> "/etc/rc.d/$APP_NAME" - echo 'start_cmd="${name}_start"' >> "/etc/rc.d/$APP_NAME" - echo 'load_rc_config $name' >> "/etc/rc.d/$APP_NAME" - echo 'status_cmd="${name}_status"' >> "/etc/rc.d/$APP_NAME" - echo 'stop_cmd="${name}_stop"' >> "/etc/rc.d/$APP_NAME" - echo "${APP_NAME}_status() {" >> "/etc/rc.d/$APP_NAME" - echo '${command} status' >> "/etc/rc.d/$APP_NAME" - echo '}' >> "/etc/rc.d/$APP_NAME" - echo "${APP_NAME}_stop() {" >> "/etc/rc.d/$APP_NAME" - echo '${command} stop' >> "/etc/rc.d/$APP_NAME" - echo '}' >> "/etc/rc.d/$APP_NAME" - echo "${APP_NAME}_start() {" >> "/etc/rc.d/$APP_NAME" - echo '${command} start' >> "/etc/rc.d/$APP_NAME" - echo '}' >> "/etc/rc.d/$APP_NAME" - echo 'run_rc_command "$1"' >> "/etc/rc.d/$APP_NAME" - fi - echo "${APP_NAME}_enable=\"YES\"" >> /etc/rc.conf - chmod 555 "/etc/rc.d/$APP_NAME" - fi - elif [ "$DIST_OS" = "macosx" ] ; then - eval echo 'Detected Mac OSX:' - if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - if [ -f "${REALDIR}/${APP_PLIST}" ] ; then - ln -s "${REALDIR}/${APP_PLIST}" "/Library/LaunchDaemons/${APP_PLIST}" - else - echo "" > "/Library/LaunchDaemons/${APP_PLIST}" - echo "> "/Library/LaunchDaemons/${APP_PLIST}" - echo "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo "" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " Label" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ${APP_PLIST_BASE}" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ProgramArguments" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ${REALDIR}/${APP_NAME}" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " launchdinternal" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " OnDemand" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " RunAtLoad" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - if [ "X$RUN_AS_USER" != "X" ] ; then - echo " UserName" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ${RUN_AS_USER}" >> "/Library/LaunchDaemons/${APP_PLIST}" - fi - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo "" >> "/Library/LaunchDaemons/${APP_PLIST}" - fi - chmod 555 "/Library/LaunchDaemons/${APP_PLIST}" - fi - elif [ "$DIST_OS" = "zos" ] ; then - eval echo 'Detected z/OS:' - if [ -f /etc/rc.bak ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - cp /etc/rc /etc/rc.bak - sed "s:echo /etc/rc script executed, \`date\`::g" /etc/rc.bak > /etc/rc - echo "_BPX_JOBNAME='${APP_NAME}' \"${REALDIR}/${APP_NAME}\" start" >>/etc/rc - echo '/etc/rc script executed, `date`' >>/etc/rc - fi - else - eval echo 'Install not currently supported for $DIST_OS' - exit 1 - fi - fi -} - -removedaemon() { - if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then - eval echo 'Must be root to perform this action.' - exit 1 - else - stopit "0" - APP_NAME_LOWER=`echo "$APP_NAME" | tr [A-Z] [a-z]` - if [ "$DIST_OS" = "solaris" ] ; then - eval echo 'Detected Solaris:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "linux" ] ; then - if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then - eval echo 'Detected RHEL or Fedora:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - /sbin/chkconfig "$APP_NAME" off - /sbin/chkconfig --del "$APP_NAME" - rm -f "/etc/init.d/$APP_NAME" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ -f /etc/SuSE-release ] ; then - eval echo 'Detected SuSE or SLES:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - insserv -r "/etc/init.d/$APP_NAME" - rm -f "/etc/init.d/$APP_NAME" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ -f /etc/lsb-release ] ; then - eval echo 'Detected Ubuntu:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - update-rc.d -f "$APP_NAME" remove - rm -f "/etc/init.d/$APP_NAME" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - else - eval echo 'Detected Linux:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc2.d/S20$APP_NAME_LOWER" "/etc/rc2.d/K20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/rc5.d/K20$APP_NAME_LOWER" "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - fi - elif [ "$DIST_OS" = "hpux" ] ; then - eval echo 'Detected HP-UX:' - if [ -f "/sbin/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/sbin/rc3.d/K20$APP_NAME_LOWER" "/sbin/rc3.d/S20$APP_NAME_LOWER" "/sbin/init.d/$APP_NAME" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "aix" ] ; then - eval echo 'Detected AIX:' - if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc.d/rc2.d/S20$APP_NAME_LOWER" "/etc/rc.d/rc2.d/K20$APP_NAME_LOWER" "/etc/rc.d/init.d/$APP_NAME" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "freebsd" ] ; then - eval echo 'Detected FreeBSD:' - if [ -f "/etc/rc.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc.d/$APP_NAME" - do - rm -f $i - done - sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "macosx" ] ; then - eval echo 'Detected Mac OSX:' - if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - # Make sure the plist is installed - LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}` - if [ "X${LOADED_PLIST}" != "X" ] ; then - launchctl unload "/Library/LaunchDaemons/${APP_PLIST}" - fi - rm -f "/Library/LaunchDaemons/${APP_PLIST}" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "zos" ] ; then - eval echo 'Detected z/OS:' - if [ -f /etc/rc.bak ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - cp /etc/rc /etc/rc.bak - sed "s/_BPX_JOBNAME=\'APP_NAME\'.*//g" /etc/rc.bak > /etc/rc - rm /etc/rc.bak - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - else - eval echo 'Remove not currently supported for $DIST_OS' - exit 1 - fi - fi -} - -dump() { - eval echo 'Dumping $APP_LONG_NAME...' - getpid - if [ "X$pid" = "X" ] - then - eval echo '$APP_LONG_NAME was not running.' - else - kill -3 $pid - - if [ $? -ne 0 ] - then - eval echo 'Failed to dump $APP_LONG_NAME.' - exit 1 - else - eval echo 'Dumped $APP_LONG_NAME.' - fi - fi -} - -# Used by HP-UX init scripts. -startmsg() { - getpid - if [ "X$pid" = "X" ] - then - eval echo 'Starting $APP_LONG_NAME... Wrapper:Stopped' - else - if [ "X$DETAIL_STATUS" = "X" ] - then - eval echo 'Starting $APP_LONG_NAME... Wrapper:Running' - else - getstatus - eval echo 'Starting $APP_LONG_NAME... Wrapper:$STATUS, Java:$JAVASTATUS' - fi - fi -} - -# Used by HP-UX init scripts. -stopmsg() { - getpid - if [ "X$pid" = "X" ] - then - eval echo 'Stopping $APP_LONG_NAME... Wrapper:Stopped' - else - if [ "X$DETAIL_STATUS" = "X" ] - then - eval echo 'Stopping $APP_LONG_NAME... Wrapper:Running' - else - getstatus - eval echo 'Stopping $APP_LONG_NAME... Wrapper:$STATUS, Java:$JAVASTATUS' - fi - fi -} - -case "$1" in - - 'console') - checkUser touchlock $1 - console - ;; - - 'start') - if [ "$DIST_OS" = "macosx" -a -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then - macosxstart - else - checkUser touchlock $1 - start - fi - ;; - - 'stop') - checkUser "" $1 - stopit "0" - ;; - - 'restart') - checkUser touchlock $1 - stopit "0" - start - ;; - - 'condrestart') - checkUser touchlock $1 - stopit "1" - start - ;; - - 'status') - checkUser "" $1 - status - ;; - - 'install') - installdaemon - ;; - - 'remove') - removedaemon - ;; - - 'dump') - checkUser "" $1 - dump - ;; - - 'start_msg') - # Internal command called by launchd on HP-UX. - checkUser "" $1 - startmsg - ;; - - 'stop_msg') - # Internal command called by launchd on HP-UX. - checkUser "" $1 - stopmsg - ;; - - 'launchdinternal') - # Internal command called by launchd on Max OSX. - # We do not want to call checkUser here as it is handled in the launchd plist file. Doing it here would confuse launchd. - launchdinternal - ;; - - *) - eval MSG=`gettext 'Usage: '` - echo "${MSG} $0 { console | start | stop | restart | condrestart | status | install | remove | dump }" - exit 1 - ;; -esac - -exit 0 +source tr.iwsn diff --git a/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-macosx-universal-64 b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-macosx-universal-64 index 4ceeed3fc..58a51301c 100755 --- a/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-macosx-universal-64 +++ b/assemblies/iwsn-assembly/src/main/assembly/bin/tr.iwsn-macosx-universal-64 @@ -1,1343 +1,5 @@ -#! /bin/sh - -# -# Copyright (c) 1999, 2010 Tanuki Software, Ltd. -# http://www.tanukisoftware.com -# All rights reserved. -# -# This software is the proprietary information of Tanuki Software. -# You shall use it only in accordance with the terms of the -# license agreement you entered into with Tanuki Software. -# http://wrapper.tanukisoftware.com/doc/english/licenseOverview.html -# -# 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 -# Optimized for use with version 3.5.2 of the Wrapper. - -# Application -APP_NAME="tr.iwsn" -APP_LONG_NAME="Testbed Runtime iWSN" +#! /bin/bash # Wrapper WRAPPER_CMD="../lib/wrapper-macosx-universal-64" -WRAPPER_CONF="../conf/tr.iwsn.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, wait for the wrapper to report that the daemon has started -WAIT_FOR_STARTED_STATUS=true -WAIT_FOR_STARTED_TIMEOUT=120 - -# 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@ - -# When installing on On Mac OSX platforms, the following domain will be used to -# prefix the plist file name. -PLIST_DOMAIN=org.tanukisoftware.wrapper - -# 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 -#----------------------------------------------------------------------------- - -# Required for HP-UX Startup -if [ `uname -s` = "HP-UX" -o `uname -s` = "HP-UX64" ] ; then - PATH=$PATH:/usr/bin -fi - -# 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/ucb/ps" - if [ ! -x "$PSEXE" ] - then - PSEXE="/usr/bin/ps" - if [ ! -x "$PSEXE" ] - then - PSEXE="/bin/ps" - if [ ! -x "$PSEXE" ] - then - eval echo 'Unable to locate "ps".' - eval echo 'Please report this message along with the location of the command on your system.' - exit 1 - fi - fi - fi - -# Resolve the os -DIST_OS=`uname -s | tr [A-Z] [a-z] | tr -d ' '` -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" - ;; - 'os/390') - DIST_OS="zos" - ;; -esac - -# Resolve the architecture -if [ "$DIST_OS" = "macosx" ] -then - OS_VER=`sw_vers | grep 'ProductVersion:' | grep -o '[0-9]*\.[0-9]*\.[0-9]*'` - DIST_ARCH="universal" - if [[ "$OS_VER" < "10.5.0" ]] - then - DIST_BITS="32" - else - DIST_BITS="64" - fi - APP_PLIST_BASE=${PLIST_DOMAIN}.${APP_NAME} - APP_PLIST=${APP_PLIST_BASE}.plist -else - DIST_ARCH= - DIST_ARCH=`uname -p 2>/dev/null | tr [A-Z] [a-z] | tr -d ' '` - if [ "X$DIST_ARCH" = "X" ] - then - DIST_ARCH="unknown" - fi - if [ "$DIST_ARCH" = "unknown" ] - then - DIST_ARCH=`uname -m 2>/dev/null | tr [A-Z] [a-z] | tr -d ' '` - fi - case "$DIST_ARCH" in - 'athlon' | 'i386' | 'i486' | 'i586' | 'i686') - DIST_ARCH="x86" - if [ "${DIST_OS}" = "solaris" ] ; then - DIST_BITS=`isainfo -b` - else - DIST_BITS="32" - fi - ;; - 'amd64' | 'x86_64') - DIST_ARCH="x86" - DIST_BITS="64" - ;; - 'ia32') - DIST_ARCH="ia" - DIST_BITS="32" - ;; - 'ia64' | 'ia64n' | 'ia64w') - DIST_ARCH="ia" - DIST_BITS="64" - ;; - 'ip27') - DIST_ARCH="mips" - DIST_BITS="32" - ;; - 'power' | 'powerpc' | 'power_pc' | 'ppc64') - if [ "${DIST_ARCH}" = "ppc64" ] ; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - DIST_ARCH="ppc" - if [ "${DIST_OS}" = "aix" ] ; then - if [ `getconf KERNEL_BITMODE` -eq 64 ]; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - fi - ;; - 'pa_risc' | 'pa-risc') - DIST_ARCH="parisc" - if [ `getconf KERNEL_BITS` -eq 64 ]; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - ;; - 'sun4u' | 'sparcv9' | 'sparc') - DIST_ARCH="sparc" - DIST_BITS=`isainfo -b` - ;; - '9000/800' | '9000/785') - DIST_ARCH="parisc" - if [ `getconf KERNEL_BITS` -eq 64 ]; then - DIST_BITS="64" - else - DIST_BITS="32" - fi - ;; - '2097') - DIST_ARCH="390" - DIST_BITS="32" - ;; - 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 - -# Test Echo -ECHOTEST=`echo -n "x"` -if [ "$ECHOTEST" = "x" ] -then - ECHOOPT="-n " -else - ECHOOPT="" -fi - - -gettext() { - echo $1 -} - -outputFile() { - if [ -f "$1" ] - then - eval echo ' $1 Found but not executable.'; - else - echo " $1" - fi -} - -# Decide on the wrapper binary to use. -# If the bits of the OS could be detected, we will try to look for the -# binary with the correct bits value. If it doesn't exist, fall back -# and look for the 32-bit binary. If that doesn't exist either then -# look for the default. -WRAPPER_TEST_CMD="" -if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" ] -then - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" - if [ ! -x "$WRAPPER_TEST_CMD" ] - then - chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null - fi - if [ -x "$WRAPPER_TEST_CMD" ] - then - WRAPPER_CMD="$WRAPPER_TEST_CMD" - else - outputFile "$WRAPPER_TEST_CMD" - WRAPPER_TEST_CMD="" - fi -fi -if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" -a -z "$WRAPPER_TEST_CMD" ] -then - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" - if [ ! -x "$WRAPPER_TEST_CMD" ] - then - chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null - fi - if [ -x "$WRAPPER_TEST_CMD" ] - then - WRAPPER_CMD="$WRAPPER_TEST_CMD" - else - outputFile "$WRAPPER_TEST_CMD" - WRAPPER_TEST_CMD="" - fi -fi -if [ -f "$WRAPPER_CMD" -a -z "$WRAPPER_TEST_CMD" ] -then - WRAPPER_TEST_CMD="$WRAPPER_CMD" - if [ ! -x "$WRAPPER_TEST_CMD" ] - then - chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null - fi - if [ -x "$WRAPPER_TEST_CMD" ] - then - WRAPPER_CMD="$WRAPPER_TEST_CMD" - else - outputFile "$WRAPPER_TEST_CMD" - WRAPPER_TEST_CMD="" - fi -fi -if [ -z $WRAPPER_TEST_CMD ] -then - echo "Unable to locate any of the following binaries:" - outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" - if [ ! "$DIST_BITS" = "32" ] - then - outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" - fi - outputFile "$WRAPPER_CMD" - - exit 1 -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$WAIT_FOR_STARTED_STATUS" = "X" ] -then - STATUSPROP= -else - STATUSPROP="wrapper.statusfile=\"$STATUSFILE\" wrapper.java.statusfile=\"$JAVASTATUSFILE\"" -fi - -if [ ! -n "$WAIT_FOR_STARTED_STATUS" ] -then - WAIT_FOR_STARTED_STATUS=true -fi - -if [ $WAIT_FOR_STARTED_STATUS = true ] ; then - DETAIL_STATUS=true -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 - eval echo 'Unable to locate "id".' - eval 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 - 'freebsd') - pidtest=`$PSEXE -p $pid -o args | tail -1` - if [ "X$pidtest" = "XCOMMAND" ] - then - pidtest="" - fi - ;; - 'macosx') - pidtest=`$PSEXE -ww -p $pid -o command | grep "$WRAPPER_CMD" | tail -1` - ;; - 'solaris') - if [ -f "/usr/bin/pargs" ] - then - pidtest=`pargs $pid | grep "$WRAPPER_CMD" | tail -1` - else - case "$PSEXE" in - '/usr/ucb/ps') - pidtest=`$PSEXE -auxww $pid | grep "$WRAPPER_CMD" | tail -1` - ;; - '/usr/bin/ps') - TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1` - COUNT=`echo $TRUNCATED_CMD | wc -m` - COUNT=`echo ${COUNT}` - COUNT=`expr $COUNT - 1` - TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT` - pidtest=`$PSEXE -o comm -p $pid | grep "$TRUNCATED_CMD" | tail -1` - ;; - '/bin/ps') - TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1` - COUNT=`echo $TRUNCATED_CMD | wc -m` - COUNT=`echo ${COUNT}` - COUNT=`expr $COUNT - 1` - TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT` - pidtest=`$PSEXE -o comm -p $pid | grep "$TRUNCATED_CMD" | tail -1` - ;; - *) - echo "Unsupported ps command $PSEXE" - exit 1 - ;; - esac - fi - ;; - 'hpux') - pidtest=`$PSEXE -p $pid -x -o args | 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" - eval echo 'Removed stale pid file: $PIDFILE' - pid="" - fi - fi - else - eval 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() { - case "$DIST_OS" in - 'solaris') - case "$PSEXE" in - '/usr/ucb/ps') - pid=`$PSEXE $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` - ;; - '/usr/bin/ps') - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` - ;; - '/bin/ps') - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` - ;; - *) - echo "Unsupported ps command $PSEXE" - exit 1 - ;; - esac - ;; - *) - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` 2>/dev/null - ;; - esac - if [ "X$pid" = "X" ] - then - # Process is gone so remove the pid file. - rm -f "$PIDFILE" - pid="" - fi -} - -launchdtrap() { - stopit - exit -} - -waitforwrapperstop() { - getpid - while [ "X$pid" != "X" ] ; do - sleep 1 - getpid - done -} - -launchdinternal() { - getpid - trap launchdtrap TERM - 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 - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi - # launchd expects that this script stay up and running so we need to do our own monitoring of the Wrapper process. - if [ $WAIT_FOR_STARTED_STATUS = true ] - then - waitforwrapperstop - fi -} - -console() { - eval echo 'Running $APP_LONG_NAME...' - getpid - if [ "X$pid" = "X" ] - then - trap '' 3 - # 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 - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi -} - -waitforjavastartup() { - getstatus - eval echo $ECHOOPT `gettext 'Waiting for $APP_LONG_NAME...'` - - # Wait until the timeout or we have something besides Unknown. - counter=15 - while [ "$JAVASTATUS" = "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do - echo $ECHOOPT"." - sleep 1 - getstatus - counter=`expr $counter - 1` - done - - if [ -n "$WAIT_FOR_STARTED_TIMEOUT" ] ; then - counter=$WAIT_FOR_STARTED_TIMEOUT - else - counter=120 - fi - while [ "$JAVASTATUS" != "STARTED" -a "$JAVASTATUS" != "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do - echo $ECHOOPT"." - sleep 1 - getstatus - counter=`expr $counter - 1` - done - if [ "X$ECHOOPT" != "X" ] ; then - echo "" - fi -} - -startwait() { - if [ $WAIT_FOR_STARTED_STATUS = true ] - then - waitforjavastartup - 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 $ECHOOPT"." - i=`expr $i + 1` - done - if [ $WAIT_AFTER_STARTUP -gt 0 -o $WAIT_FOR_STARTED_STATUS = true ] - then - getpid - if [ "X$pid" = "X" ] - then - eval echo ' WARNING: $APP_LONG_NAME may have failed to start.' - exit 1 - else - eval echo ' running: PID:$pid' - fi - else - echo "" - fi -} - -macosxstart() { - # The daemon has been installed. - eval echo 'Starting $APP_LONG_NAME. Detected Mac OSX and installed launchd daemon.' - if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then - eval echo 'Must be root to perform this action.' - exit 1 - fi - - getpid - if [ "X$pid" != "X" ] ; then - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi - - # If the daemon was just installed, it may not be loaded. - LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}` - if [ "X${LOADED_PLIST}" = "X" ] ; then - launchctl load /Library/LaunchDaemons/${APP_PLIST} - fi - # If launchd is set to run the daemon already at Load, we don't need to call start - getpid - if [ "X$pid" == "X" ] ; then - launchctl start ${APP_PLIST_BASE} - fi - - startwait -} - -start() { - eval echo $ECHOOPT `gettext '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 - eval echo '$APP_LONG_NAME is already running.' - exit 1 - fi - - startwait -} - -stopit() { - # $1 exit if down flag - - eval echo 'Stopping $APP_LONG_NAME...' - getpid - if [ "X$pid" = "X" ] - then - eval echo '$APP_LONG_NAME was not running.' - if [ "X$1" = "X1" ] - then - exit 1 - fi - 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 - eval 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 - eval 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 - eval 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 - eval echo 'Failed to stop $APP_LONG_NAME.' - exit 1 - else - eval echo 'Stopped $APP_LONG_NAME.' - fi - fi -} - -status() { - getpid - if [ "X$pid" = "X" ] - then - eval echo '$APP_LONG_NAME is not running.' - exit 1 - else - if [ "X$DETAIL_STATUS" = "X" ] - then - eval echo '$APP_LONG_NAME is running: PID:$pid' - else - getstatus - eval echo '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS' - fi - exit 0 - fi -} - -installdaemon() { - if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then - eval echo 'Must be root to perform this action.' - exit 1 - else - APP_NAME_LOWER=`echo "$APP_NAME" | tr [A-Z] [a-z]` - if [ "$DIST_OS" = "solaris" ] ; then - eval echo 'Detected Solaris:' - if [ -f /etc/init.d/$APP_NAME ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER" - fi - elif [ "$DIST_OS" = "linux" ] ; then - if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then - eval echo 'Detected RHEL or Fedora:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - /sbin/chkconfig --add "$APP_NAME" - /sbin/chkconfig "$APP_NAME" on - fi - elif [ -f /etc/SuSE-release ] ; then - eval echo 'Detected SuSE or SLES:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - insserv "/etc/init.d/$APP_NAME" - fi - elif [ -f /etc/lsb-release ] ; then - eval echo 'Detected Ubuntu:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/etc/init.d/$APP_NAME" - update-rc.d "$APP_NAME" defaults - fi - else - eval echo 'Detected Linux:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" /etc/init.d/$APP_NAME - ln -s "/etc/init.d/$APP_NAME" "/etc/rc2.d/K20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc2.d/S20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER" - ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/K20$APP_NAME_LOWER" - fi - fi - elif [ "$DIST_OS" = "hpux" ] ; then - eval echo 'Detected HP-UX:' - if [ -f "/sbin/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" "/sbin/init.d/$APP_NAME" - ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/K20$APP_NAME_LOWER" - ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/S20$APP_NAME_LOWER" - fi - elif [ "$DIST_OS" = "aix" ] ; then - eval echo 'Detected AIX:' - if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - ln -s "$REALPATH" /etc/rc.d/init.d/$APP_NAME - ln -s "/etc/rc.d/init.d/$APP_NAME" "/etc/rc.d/rc2.d/S20$APP_NAME_LOWER" - ln -s "/etc/rc.d/init.d/$APP_NAME" "/etc/rc.d/rc2.d/K20$APP_NAME_LOWER" - fi - elif [ "$DIST_OS" = "freebsd" ] ; then - eval echo 'Detected FreeBSD:' - if [ -f "/etc/rc.d/$APP_NAME" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf - if [ -f "${REALDIR}/${APP_NAME}.install" ] ; then - ln -s "${REALDIR}/${APP_NAME}.install" "/etc/rc.d/$APP_NAME" - else - echo '#!/bin/sh' > "/etc/rc.d/$APP_NAME" - echo "#" >> "/etc/rc.d/$APP_NAME" - echo "# PROVIDE: $APP_NAME" >> "/etc/rc.d/$APP_NAME" - echo "# REQUIRE: NETWORKING" >> "/etc/rc.d/$APP_NAME" - echo "# KEYWORD: shutdown" >> "/etc/rc.d/$APP_NAME" - echo ". /etc/rc.subr" >> "/etc/rc.d/$APP_NAME" - echo "name=\"$APP_NAME\"" >> "/etc/rc.d/$APP_NAME" - echo "rcvar=\`set_rcvar\`" >> "/etc/rc.d/$APP_NAME" - echo "command=\"${REALDIR}/${APP_NAME}\"" >> "/etc/rc.d/$APP_NAME" - echo 'start_cmd="${name}_start"' >> "/etc/rc.d/$APP_NAME" - echo 'load_rc_config $name' >> "/etc/rc.d/$APP_NAME" - echo 'status_cmd="${name}_status"' >> "/etc/rc.d/$APP_NAME" - echo 'stop_cmd="${name}_stop"' >> "/etc/rc.d/$APP_NAME" - echo "${APP_NAME}_status() {" >> "/etc/rc.d/$APP_NAME" - echo '${command} status' >> "/etc/rc.d/$APP_NAME" - echo '}' >> "/etc/rc.d/$APP_NAME" - echo "${APP_NAME}_stop() {" >> "/etc/rc.d/$APP_NAME" - echo '${command} stop' >> "/etc/rc.d/$APP_NAME" - echo '}' >> "/etc/rc.d/$APP_NAME" - echo "${APP_NAME}_start() {" >> "/etc/rc.d/$APP_NAME" - echo '${command} start' >> "/etc/rc.d/$APP_NAME" - echo '}' >> "/etc/rc.d/$APP_NAME" - echo 'run_rc_command "$1"' >> "/etc/rc.d/$APP_NAME" - fi - echo "${APP_NAME}_enable=\"YES\"" >> /etc/rc.conf - chmod 555 "/etc/rc.d/$APP_NAME" - fi - elif [ "$DIST_OS" = "macosx" ] ; then - eval echo 'Detected Mac OSX:' - if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - if [ -f "${REALDIR}/${APP_PLIST}" ] ; then - ln -s "${REALDIR}/${APP_PLIST}" "/Library/LaunchDaemons/${APP_PLIST}" - else - echo "" > "/Library/LaunchDaemons/${APP_PLIST}" - echo "> "/Library/LaunchDaemons/${APP_PLIST}" - echo "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo "" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " Label" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ${APP_PLIST_BASE}" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ProgramArguments" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ${REALDIR}/${APP_NAME}" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " launchdinternal" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " OnDemand" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " RunAtLoad" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - if [ "X$RUN_AS_USER" != "X" ] ; then - echo " UserName" >> "/Library/LaunchDaemons/${APP_PLIST}" - echo " ${RUN_AS_USER}" >> "/Library/LaunchDaemons/${APP_PLIST}" - fi - echo " " >> "/Library/LaunchDaemons/${APP_PLIST}" - echo "" >> "/Library/LaunchDaemons/${APP_PLIST}" - fi - chmod 555 "/Library/LaunchDaemons/${APP_PLIST}" - fi - elif [ "$DIST_OS" = "zos" ] ; then - eval echo 'Detected z/OS:' - if [ -f /etc/rc.bak ] ; then - eval echo ' The $APP_LONG_NAME daemon is already installed.' - exit 1 - else - eval echo ' Installing the $APP_LONG_NAME daemon..' - cp /etc/rc /etc/rc.bak - sed "s:echo /etc/rc script executed, \`date\`::g" /etc/rc.bak > /etc/rc - echo "_BPX_JOBNAME='${APP_NAME}' \"${REALDIR}/${APP_NAME}\" start" >>/etc/rc - echo '/etc/rc script executed, `date`' >>/etc/rc - fi - else - eval echo 'Install not currently supported for $DIST_OS' - exit 1 - fi - fi -} - -removedaemon() { - if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then - eval echo 'Must be root to perform this action.' - exit 1 - else - stopit "0" - APP_NAME_LOWER=`echo "$APP_NAME" | tr [A-Z] [a-z]` - if [ "$DIST_OS" = "solaris" ] ; then - eval echo 'Detected Solaris:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "linux" ] ; then - if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then - eval echo 'Detected RHEL or Fedora:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - /sbin/chkconfig "$APP_NAME" off - /sbin/chkconfig --del "$APP_NAME" - rm -f "/etc/init.d/$APP_NAME" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ -f /etc/SuSE-release ] ; then - eval echo 'Detected SuSE or SLES:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - insserv -r "/etc/init.d/$APP_NAME" - rm -f "/etc/init.d/$APP_NAME" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ -f /etc/lsb-release ] ; then - eval echo 'Detected Ubuntu:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - update-rc.d -f "$APP_NAME" remove - rm -f "/etc/init.d/$APP_NAME" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - else - eval echo 'Detected Linux:' - if [ -f "/etc/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc2.d/S20$APP_NAME_LOWER" "/etc/rc2.d/K20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/rc5.d/K20$APP_NAME_LOWER" "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - fi - elif [ "$DIST_OS" = "hpux" ] ; then - eval echo 'Detected HP-UX:' - if [ -f "/sbin/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/sbin/rc3.d/K20$APP_NAME_LOWER" "/sbin/rc3.d/S20$APP_NAME_LOWER" "/sbin/init.d/$APP_NAME" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "aix" ] ; then - eval echo 'Detected AIX:' - if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc.d/rc2.d/S20$APP_NAME_LOWER" "/etc/rc.d/rc2.d/K20$APP_NAME_LOWER" "/etc/rc.d/init.d/$APP_NAME" - do - rm -f $i - done - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "freebsd" ] ; then - eval echo 'Detected FreeBSD:' - if [ -f "/etc/rc.d/$APP_NAME" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - for i in "/etc/rc.d/$APP_NAME" - do - rm -f $i - done - sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "macosx" ] ; then - eval echo 'Detected Mac OSX:' - if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - # Make sure the plist is installed - LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}` - if [ "X${LOADED_PLIST}" != "X" ] ; then - launchctl unload "/Library/LaunchDaemons/${APP_PLIST}" - fi - rm -f "/Library/LaunchDaemons/${APP_PLIST}" - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - elif [ "$DIST_OS" = "zos" ] ; then - eval echo 'Detected z/OS:' - if [ -f /etc/rc.bak ] ; then - eval echo ' Removing $APP_LONG_NAME daemon...' - cp /etc/rc /etc/rc.bak - sed "s/_BPX_JOBNAME=\'APP_NAME\'.*//g" /etc/rc.bak > /etc/rc - rm /etc/rc.bak - else - eval echo ' The $APP_LONG_NAME daemon is not currently installed.' - exit 1 - fi - else - eval echo 'Remove not currently supported for $DIST_OS' - exit 1 - fi - fi -} - -dump() { - eval echo 'Dumping $APP_LONG_NAME...' - getpid - if [ "X$pid" = "X" ] - then - eval echo '$APP_LONG_NAME was not running.' - else - kill -3 $pid - - if [ $? -ne 0 ] - then - eval echo 'Failed to dump $APP_LONG_NAME.' - exit 1 - else - eval echo 'Dumped $APP_LONG_NAME.' - fi - fi -} - -# Used by HP-UX init scripts. -startmsg() { - getpid - if [ "X$pid" = "X" ] - then - eval echo 'Starting $APP_LONG_NAME... Wrapper:Stopped' - else - if [ "X$DETAIL_STATUS" = "X" ] - then - eval echo 'Starting $APP_LONG_NAME... Wrapper:Running' - else - getstatus - eval echo 'Starting $APP_LONG_NAME... Wrapper:$STATUS, Java:$JAVASTATUS' - fi - fi -} - -# Used by HP-UX init scripts. -stopmsg() { - getpid - if [ "X$pid" = "X" ] - then - eval echo 'Stopping $APP_LONG_NAME... Wrapper:Stopped' - else - if [ "X$DETAIL_STATUS" = "X" ] - then - eval echo 'Stopping $APP_LONG_NAME... Wrapper:Running' - else - getstatus - eval echo 'Stopping $APP_LONG_NAME... Wrapper:$STATUS, Java:$JAVASTATUS' - fi - fi -} - -case "$1" in - - 'console') - checkUser touchlock $1 - console - ;; - - 'start') - if [ "$DIST_OS" = "macosx" -a -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then - macosxstart - else - checkUser touchlock $1 - start - fi - ;; - - 'stop') - checkUser "" $1 - stopit "0" - ;; - - 'restart') - checkUser touchlock $1 - stopit "0" - start - ;; - - 'condrestart') - checkUser touchlock $1 - stopit "1" - start - ;; - - 'status') - checkUser "" $1 - status - ;; - - 'install') - installdaemon - ;; - - 'remove') - removedaemon - ;; - - 'dump') - checkUser "" $1 - dump - ;; - - 'start_msg') - # Internal command called by launchd on HP-UX. - checkUser "" $1 - startmsg - ;; - - 'stop_msg') - # Internal command called by launchd on HP-UX. - checkUser "" $1 - stopmsg - ;; - - 'launchdinternal') - # Internal command called by launchd on Max OSX. - # We do not want to call checkUser here as it is handled in the launchd plist file. Doing it here would confuse launchd. - launchdinternal - ;; - - *) - eval MSG=`gettext 'Usage: '` - echo "${MSG} $0 { console | start | stop | restart | condrestart | status | install | remove | dump }" - exit 1 - ;; -esac - -exit 0 +source tr.iwsn