
hopefully any other affected *nix systems) now properly discards non- essential directories after installation. * Support for Win9x in the installer and postinstall.bat. * Changed the name of the default installation directory on all platforms from "I2P" to "i2p" in the installer. * Changed "wrapper.conf" to "wrapper.config" for naming consistency with the other configuration files.
339 lines
8.3 KiB
Bash
339 lines
8.3 KiB
Bash
#! /bin/sh
|
|
|
|
#
|
|
# Skeleton sh script suitable for starting and stopping
|
|
# wrapped Java apps on the Solaris platform.
|
|
#
|
|
# Make sure that PIDFILE points to the correct location,
|
|
# if you have changed the default location set in the
|
|
# wrapper configuration file.
|
|
#
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# These settings can be modified to fit the needs of your application
|
|
|
|
# Application
|
|
APP_NAME="i2p"
|
|
APP_LONG_NAME="I2P Service"
|
|
|
|
# Wrapper
|
|
WRAPPER_CMD="./i2psvc"
|
|
WRAPPER_CONF="wrapper.config"
|
|
|
|
# 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
|
|
|
|
# If specified, the Wrapper will be run as the specified user when the 'start'
|
|
# command is passed to this script. When running with the 'console' command
|
|
# the current user will be used.
|
|
# 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=
|
|
|
|
# Do not modify anything beyond this point
|
|
#-----------------------------------------------------------------------------
|
|
|
|
# Get the fully qualified path to the script
|
|
case $0 in
|
|
/*)
|
|
SCRIPT="$0"
|
|
;;
|
|
*)
|
|
PWD=`pwd`
|
|
SCRIPT="$PWD/$0"
|
|
;;
|
|
esac
|
|
|
|
# Change spaces to ":" so the tokens can be parsed.
|
|
SCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
|
|
# Get the real path to this script, resolving any symbolic links
|
|
TOKENS=`echo $SCRIPT | sed -e 's;/; ;g'`
|
|
REALPATH=
|
|
for C in $TOKENS; do
|
|
REALPATH="$REALPATH/$C"
|
|
while [ -h "$REALPATH" ] ; do
|
|
LS="`ls -ld "$REALPATH"`"
|
|
LINK="`expr "$LS" : '.*-> \(.*\)$'`"
|
|
if expr "$LINK" : '/.*' > /dev/null; then
|
|
REALPATH="$LINK"
|
|
else
|
|
REALPATH="`dirname "$REALPATH"`""/$LINK"
|
|
fi
|
|
done
|
|
done
|
|
# Change ":" chars back to spaces.
|
|
REALPATH=`echo $REALPATH | sed -e 's;:; ;g'`
|
|
|
|
# Change the current directory to the location of the script
|
|
cd "`dirname "$REALPATH"`"
|
|
|
|
# Process ID
|
|
ANCHORFILE="$PIDDIR/$APP_NAME.anchor"
|
|
PIDFILE="$PIDDIR/$APP_NAME.pid"
|
|
pid=""
|
|
|
|
# Resolve the location of the 'ps' command
|
|
PSEXE="/usr/bin/ps"
|
|
if [ ! -x $PSEXE ]
|
|
then
|
|
PSEXE="/bin/ps"
|
|
if [ ! -x $PSEXE ]
|
|
then
|
|
echo "Unable to locate 'ps'."
|
|
echo "Please report this with the location on your system."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Build the nice clause
|
|
if [ "X$PRIORITY" = "X" ]
|
|
then
|
|
CMDNICE=""
|
|
else
|
|
CMDNICE="nice -$PRIORITY"
|
|
fi
|
|
|
|
# Check the configured user
|
|
if [ "X$RUN_AS_USER" != "X" ]
|
|
then
|
|
if [ "`id -u -n`" = "$RUN_AS_USER" ]
|
|
then
|
|
# Already running as the configured user. Avoid password prompts by not calling su.
|
|
RUN_AS_USER=""
|
|
fi
|
|
fi
|
|
|
|
getpid() {
|
|
if [ -f $PIDFILE ]
|
|
then
|
|
if [ -r $PIDFILE ]
|
|
then
|
|
pid=`cat $PIDFILE`
|
|
if [ "X$pid" != "X" ]
|
|
then
|
|
# Verify that a process with this pid is still running.
|
|
pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -n 1`
|
|
if [ "X$pid" = "X" ]
|
|
then
|
|
# This is a stale pid file.
|
|
rm -f $PIDFILE
|
|
echo "Removed stale pid file: $PIDFILE"
|
|
fi
|
|
fi
|
|
else
|
|
echo "Cannot read $PIDFILE."
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
testpid() {
|
|
pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -n 1`
|
|
if [ "X$pid" = "X" ]
|
|
then
|
|
# Process is gone so remove the pid file.
|
|
rm -f $PIDFILE
|
|
fi
|
|
}
|
|
|
|
console() {
|
|
echo "Running $APP_LONG_NAME..."
|
|
getpid
|
|
if [ "X$pid" = "X" ]
|
|
then
|
|
if [ "X$IGNORE_SIGNALS" = "X" ]
|
|
then
|
|
exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE
|
|
else
|
|
exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE wrapper.anchorfile=$ANCHORFILE
|
|
fi
|
|
else
|
|
echo "$APP_LONG_NAME is already running."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
start() {
|
|
echo "Starting $APP_LONG_NAME..."
|
|
getpid
|
|
if [ "X$pid" = "X" ]
|
|
then
|
|
if [ "X$IGNORE_SIGNALS" = "X" ]
|
|
then
|
|
if [ "X$RUN_AS_USER" = "X" ]
|
|
then
|
|
exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE wrapper.daemonize=TRUE
|
|
else
|
|
su -m $RUN_AS_USER -c "exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE wrapper.daemonize=TRUE"
|
|
fi
|
|
else
|
|
if [ "X$RUN_AS_USER" = "X" ]
|
|
then
|
|
exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE wrapper.anchorfile=$ANCHORFILE wrapper.ignore_signals=TRUE wrapper.daemonize=TRUE
|
|
else
|
|
su -m $RUN_AS_USER -c "exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE wrapper.anchorfile=$ANCHORFILE wrapper.ignore_signals=TRUE wrapper.daemonize=TRUE"
|
|
fi
|
|
fi
|
|
else
|
|
echo "$APP_LONG_NAME is already running."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
stopit() {
|
|
echo "Stopping $APP_LONG_NAME..."
|
|
getpid
|
|
if [ "X$pid" = "X" ]
|
|
then
|
|
echo "$APP_LONG_NAME was not running."
|
|
else
|
|
if [ "X$IGNORE_SIGNALS" = "X" ]
|
|
then
|
|
# Running so try to stop it.
|
|
kill $pid
|
|
if [ $? -ne 0 ]
|
|
then
|
|
# An explanation for the failure should have been given
|
|
echo "Unable to stop $APP_LONG_NAME."
|
|
exit 1
|
|
fi
|
|
else
|
|
rm -f $ANCHORFILE
|
|
if [ -f $ANCHORFILE ]
|
|
then
|
|
# An explanation for the failure should have been given
|
|
echo "Unable to stop $APP_LONG_NAME."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# We can not predict how long it will take for the wrapper to
|
|
# actually stop as it depends on settings in wrapper.conf.
|
|
# Loop until it does.
|
|
savepid=$pid
|
|
CNT=0
|
|
TOTCNT=0
|
|
while [ "X$pid" != "X" ]
|
|
do
|
|
# Loop for up to 5 minutes
|
|
if [ "$TOTCNT" -lt "300" ]
|
|
then
|
|
if [ "$CNT" -lt "5" ]
|
|
then
|
|
CNT=`expr $CNT + 1`
|
|
else
|
|
echo "Waiting for $APP_LONG_NAME to exit..."
|
|
CNT=0
|
|
fi
|
|
TOTCNT=`expr $TOTCNT + 1`
|
|
|
|
sleep 1
|
|
|
|
testpid
|
|
else
|
|
pid=
|
|
fi
|
|
done
|
|
|
|
pid=$savepid
|
|
testpid
|
|
if [ "X$pid" != "X" ]
|
|
then
|
|
echo "Timed out waiting for $APP_LONG_NAME to exit."
|
|
echo " Attempting a forced exit..."
|
|
kill -9 $pid
|
|
fi
|
|
|
|
pid=$savepid
|
|
testpid
|
|
if [ "X$pid" != "X" ]
|
|
then
|
|
echo "Failed to stop $APP_LONG_NAME."
|
|
exit 1
|
|
else
|
|
echo "Stopped $APP_LONG_NAME."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
status() {
|
|
getpid
|
|
if [ "X$pid" = "X" ]
|
|
then
|
|
echo "$APP_LONG_NAME is not running."
|
|
exit 1
|
|
else
|
|
echo "$APP_LONG_NAME is running ($pid)."
|
|
exit 0
|
|
fi
|
|
}
|
|
|
|
dump() {
|
|
echo "Dumping $APP_LONG_NAME..."
|
|
getpid
|
|
if [ "X$pid" = "X" ]
|
|
then
|
|
echo "$APP_LONG_NAME was not running."
|
|
|
|
else
|
|
kill -3 $pid
|
|
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "Failed to dump $APP_LONG_NAME."
|
|
exit 1
|
|
else
|
|
echo "Dumped $APP_LONG_NAME."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
|
|
'console')
|
|
console
|
|
;;
|
|
|
|
'start')
|
|
start
|
|
;;
|
|
|
|
'stop')
|
|
stopit
|
|
;;
|
|
|
|
'restart')
|
|
stopit
|
|
start
|
|
;;
|
|
|
|
'status')
|
|
status
|
|
;;
|
|
|
|
'dump')
|
|
dump
|
|
;;
|
|
|
|
*)
|
|
echo "Usage: $0 { console | start | stop | restart | status | dump }"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|