|
From: <ste...@ce...> - 2004-12-06 15:39:43
|
Leif ,
Sorry for all those posts but when i try to launch the daemon with your
new script
the shell complain about : "bad interpreter ........."
So i can't test it , i'm waiting to see what you think about my last post
Big thanks
Stéphane RIFF wrote:
> Leif ,
>
> I don't understand your last post: if the shell script use path like :
> PIDDIR : /usr/local/myapp/
> (This is what i've done to make my wrapper work), if you change the
> location or OS you have to change
> your script variables. Or i make a directory tree that can be move
> anywhere with relative path...
>
> Maybe i misunderstound so i gonna try your script to see what happen.
>
> Thanks for your answers
> Bye
>
>
>
> Leif Mortenson wrote:
>
>> Stephane,
>> Ok, this was a bug in the shell script. The pid file is created
>> after the working dir is
>> changed but that is not taken into account by the shell script.
>>
>> I have fixed this for the next release. The shell script will now
>> always use fully qualified
>> paths to avoid this issue. I have attached the new shell script.
>> It should work for old
>> versions of the Wrapper.
>>
>> Let me know how it works for you.
>>
>> Cheers,
>> Leif
>>
>> Stéphane RIFF wrote:
>>
>>> The user is the same (sure).
>>>
>>> The directory tree is :
>>> serviceroot
>>> |
>>> ---bin
>>> | |
>>> | ---wrapper
>>> | |
>>> | ---sh.script
>>> |
>>> ---conf
>>> | |
>>> | ---wrapper.conf
>>> |
>>> ---lib
>>> |
>>> ---logs
>>>
>>> In the wrapper.conf : wrapper.working.dir="../"
>>> In sh.script : PIDDIR="."
>>>
>>> When i start the service (with user "steff"), the MYAPP.pid file is
>>> in the "serviceroot" directory.
>>> When i want to stop (with user "steff"), the sh.script complains
>>> that "service not running". but
>>> if i print $PIDFILE in the sh.script, it display : "./MYAPP.pid" :
>>> seems good if the working directory
>>> is really set to "serviceroot"
>>>
>>> Maybe i missunderstood about working dir but if someone can points
>>> me to the right solution.....
>>> Thanks to answerers
>>>
>>> Leif Mortenson wrote:
>>>
>>>> Stephane,
>>>> My first guess here is a permission problem. Are you starting
>>>> the wrapper as the same
>>>> user that you are later attempting stop it with? I may have some
>>>> problems there but I have
>>>> not heard of any to date. Give me a little more info and I'll go
>>>> back and look over the
>>>> script some more.
>>>>
>>>> Cheers,
>>>> Leif
>>>>
>>>> Stéphane RIFF wrote:
>>>>
>>>>> I have problem with the pid file :
>>>>> in sh.script.in i have PIDDIR=".", the 'start ' command seems to
>>>>> place pidfile in the right location.
>>>>> but when i try to launch a 'stop' command the script tell me that
>>>>> the daemon isn't running .
>>>>>
>>>>> I also echo some variable and the $PIDFILE is : "./MYAPPNAME.pid" so
>>>>> i don't understand why the line : "if [ -f $PIDFILE ]" is not true
>>>>>
>>>>> I don't know if i'm understandable but i suspect there a problem
>>>>> with the sh.script.in and the wrapper.working.dir.
>>>>>
>>>>> any hints are welcome
>>>>> Thanks
>>>>
>>>>
>>>>
>>
>> ------------------------------------------------------------------------
>>
>> #! /bin/sh
>>
>> #
>> # Copyright (c) 1999, 2004 Tanuki Software
>> #
>> # 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
>>
>> # Application
>> APP_NAME="@app.name@"
>> APP_LONG_NAME="@app.long.name@"
>>
>> # Wrapper
>> WRAPPER_CMD="./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 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=
>>
>> # 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 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"`"
>> 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_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"
>> 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 message along with the location of
>> the command 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
>> # 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
>>
>> 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 -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 -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
>> wrapper.pidfile=$PIDFILE
>> else
>> exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF
>> wrapper.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
>> wrapper.pidfile=$PIDFILE wrapper.daemonize=TRUE
>> else
>> su -m $RUN_AS_USER -c "exec $CMDNICE $WRAPPER_CMD
>> $WRAPPER_CONF wrapper.pidfile=$PIDFILE wrapper.daemonize=TRUE"
>> fi
>> else
>> if [ "X$RUN_AS_USER" = "X" ]
>> then
>> exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF
>> wrapper.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 wrapper.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
>>
>>
>
>
>
> -------------------------------------------------------
> SF email is sponsored by - The IT Product Guide
> Read honest & candid reviews on hundreds of IT Products from real users.
> Discover which products truly live up to the hype. Start reading now.
> http://productguide.itmanagersjournal.com/
> _______________________________________________
> Wrapper-user mailing list
> Wra...@li...
> https://lists.sourceforge.net/lists/listinfo/wrapper-user
>
|