📄 daemon-wso2is.sh
字号:
#! /bin/sh## Copyright (c) 1999, 2006 Tanuki Software Inc.## Java Service Wrapper sh script. Suitable for starting and stopping# wrapped Java applications on UNIX platforms.##-----------------------------------------------------------------------------# These settings can be modified to fit the needs of your application# ApplicationAPP_NAME="WSO2IS-${wso2is_version}"APP_LONG_NAME="WSO2 Identity Solution ${wso2is_version}"# WrapperWRAPPER_CMD="./bin/native/wrapper"WRAPPER_CONF="./conf/wrapper.conf"# Priority at which to run the wrapper. See "man nice" for valid priorities.# nice is only used if a priority is specified.PRIORITY=# Location of the pid file.PIDDIR="."# If uncommented, causes the Wrapper to be shutdown using an anchor file.# When launched with the 'start' command, it will also ignore all INT and# TERM signals.#IGNORE_SIGNALS=true# 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@# Do not modify anything beyond this point#-----------------------------------------------------------------------------# Get the fully qualified path to the scriptcase $0 in /*) SCRIPT="$0" ;; *) PWD=`pwd` SCRIPT="$PWD/$0" ;;esac# Resolve the true real path without any sym links.CHANGED=truewhile [ "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" fidone# Change the current directory to the location of the scriptPRGDIR=`dirname "$REALPATH"`REALDIR=`cd "$PRGDIR/..";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/$PIDDIRfi# Same test for WRAPPER_CMDFIRST_CHAR=`echo $WRAPPER_CMD | cut -c1,1`if [ "$FIRST_CHAR" != "/" ]then WRAPPER_CMD=$REALDIR/$WRAPPER_CMDfi# Same test for WRAPPER_CONFFIRST_CHAR=`echo $WRAPPER_CONF | cut -c1,1`if [ "$FIRST_CHAR" != "/" ]then WRAPPER_CONF=$REALDIR/$WRAPPER_CONFfi# Process IDANCHORFILE="$PIDDIR/$APP_NAME.anchor"PIDFILE="$PIDDIR/$APP_NAME.pid"LOCKDIR="/var/lock/subsys"LOCKFILE="$LOCKDIR/$APP_NAME"pid=""# Resolve the location of the 'ps' commandPSEXE="/usr/bin/ps"if [ ! -x "$PSEXE" ]then PSEXE="/bin/ps" if [ ! -x "$PSEXE" ] then echo "Unable to locate 'ps'." echo "Please report this message along with the location of the command on your system." exit 1 fifi# Resolve the osDIST_OS=`uname -s | tr [:upper:] [:lower:] | tr -d [:blank:]`case "$DIST_OS" in 'sunos') DIST_OS="solaris" ;; 'hp-ux' | 'hp-ux64') DIST_OS="hpux" ;; 'darwin') DIST_OS="macosx" ;; 'unix_sv') DIST_OS="unixware" ;;esac# Resolve the architectureDIST_ARCH=`uname -p | tr [:upper:] [:lower:] | tr -d [:blank:]`if [ "$DIST_ARCH" = "unknown" ]then DIST_ARCH=`uname -m | tr [:upper:] [:lower:] | tr -d [:blank:]`ficase "$DIST_ARCH" in 'amd64' | 'athlon' | 'ia32' | 'ia64' | 'i386' | 'i486' | 'i586' | 'i686' | 'x86_64') DIST_ARCH="x86" ;; 'ip27') DIST_ARCH="mips" ;; 'power' | 'powerpc' | 'power_pc' | 'ppc64') DIST_ARCH="ppc" ;; 'pa_risc' | 'pa-risc') DIST_ARCH="parisc" ;; 'sun4u' | 'sparcv9') DIST_ARCH="sparc" ;; '9000/800') DIST_ARCH="parisc" ;;esacoutputFile() { if [ -f "$1" ] then echo " $1 (Found but not executable.)"; else echo " $1" fi}# Decide on the wrapper binary to use.# If a 32-bit wrapper binary exists then it will work on 32 or 64 bit# platforms, if the 64-bit binary exists then the distribution most# likely wants to use long names. Otherwise, look for the default.# For macosx, we also want to look for universal binaries.WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"if [ -x "$WRAPPER_TEST_CMD" ]then WRAPPER_CMD="$WRAPPER_TEST_CMD"else if [ "$DIST_OS" = "macosx" ] then WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-32" if [ -x "$WRAPPER_TEST_CMD" ] then WRAPPER_CMD="$WRAPPER_TEST_CMD" else WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" if [ -x "$WRAPPER_TEST_CMD" ] then WRAPPER_CMD="$WRAPPER_TEST_CMD" else WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-64" if [ -x "$WRAPPER_TEST_CMD" ] then WRAPPER_CMD="$WRAPPER_TEST_CMD" else if [ ! -x "$WRAPPER_CMD" ] then echo "Unable to locate any of the following binaries:" outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" outputFile "$WRAPPER_CMD-$DIST_OS-universal-32" outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" outputFile "$WRAPPER_CMD-$DIST_OS-universal-64" outputFile "$WRAPPER_CMD" exit 1 fi fi fi fi else WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" if [ -x "$WRAPPER_TEST_CMD" ] then WRAPPER_CMD="$WRAPPER_TEST_CMD" else if [ ! -x "$WRAPPER_CMD" ] then echo "Unable to locate any of the following binaries:" outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" outputFile "$WRAPPER_CMD" exit 1 fi fi fifi# Build the nice clauseif [ "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=TRUEfi# 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\" fificheckUser() { # $1 touchLock flag # $2 command # Check the configured user. If necessary rerun this script as the desired user. if [ "X$RUN_AS_USER" != "X" ] then # Resolve the location of the 'id' command IDEXE="/usr/xpg4/bin/id" if [ ! -x "$IDEXE" ] then IDEXE="/usr/bin/id" if [ ! -x "$IDEXE" ] then echo "Unable to locate 'id'." echo "Please report this message along with the location of the command on your system." exit 1 fi fi if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ] then # Already running as the configured user. Avoid password prompts by not calling su. RUN_AS_USER="" fi fi if [ "X$RUN_AS_USER" != "X" ] then # If LOCKPROP and $RUN_AS_USER are defined then the new user will most likely not be # able to create the lock file. The Wrapper will be able to update this file once it # is created but will not be able to delete it on shutdown. If $2 is defined then # the lock file should be created for the current command if [ "X$LOCKPROP" != "X" ] then if [ "X$1" != "X" ] then # Resolve the primary group RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1` if [ "X$RUN_AS_GROUP" = "X" ] then RUN_AS_GROUP=$RUN_AS_USER fi touch $LOCKFILE chown $RUN_AS_USER:$RUN_AS_GROUP $LOCKFILE fi fi # Still want to change users, recurse. This means that the user will only be # prompted for a password once. Variables shifted by 1 su -m $RUN_AS_USER -c "\"$REALPATH\" $2" # 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() { 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. pidtest=`$PSEXE -p $pid -o args | grep "$WRAPPER_CMD" | tail -1` if [ "X$pidtest" = "X" ] then # This is a stale pid file. rm -f "$PIDFILE" echo "Removed stale pid file: $PIDFILE" pid="" fi fi else echo "Cannot read $PIDFILE." exit 1 fi fi}testpid() { pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` if [ "X$pid" = "X" ] then # Process is gone so remove the pid file. rm -f "$PIDFILE" pid="" fi}console() { echo "Running $APP_LONG_NAME..." getpid if [ "X$pid" = "X" ] then # The string passed to eval must handles spaces in paths correctly. COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=$APP_NAME wrapper.pidfile=\"$PIDFILE\" $ANCHORPROP $LOCKPROP" eval $COMMAND_LINE else echo "$APP_LONG_NAME is already running." exit 1 fi}start() { echo "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.daemonize=TRUE $ANCHORPROP $IGNOREPROP $LOCKPROP" eval $COMMAND_LINE 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 # Show a waiting message every 5 seconds. if [ "$CNT" -lt "5" ] then CNT=`expr $CNT + 1` else echo "Waiting for $APP_LONG_NAME to exit..." CNT=0 fi TOTCNT=`expr $TOTCNT + 1` sleep 1 testpid done pid=$savepid testpid if [ "X$pid" != "X" ] then echo "Failed to stop $APP_LONG_NAME." exit 1 else echo "Stopped $APP_LONG_NAME." fi fi}status() { getpid if [ "X$pid" = "X" ] then echo "$APP_LONG_NAME is not running." exit 1 else 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') checkUser touchlock $1 console ;; 'start') checkUser touchlock $1 start ;; 'stop') checkUser "" $1 stopit ;; 'restart') checkUser touchlock $1 stopit start ;; 'status') checkUser "" $1 status ;; 'dump') checkUser "" $1 dump ;; *) echo "Usage: $0 { console | start | stop | restart | status | dump }" exit 1 ;;esacexit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -