|
From: <ste...@ce...> - 2004-11-24 16:19:30
|
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 |
|
From: Leif M. <le...@ta...> - 2004-11-26 08:09:11
|
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
>
>
> -------------------------------------------------------
> 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
>
|
|
From: <ste...@ce...> - 2004-11-26 09:09:12
|
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
>>
>>
>> -------------------------------------------------------
>> 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
>>
>
>
>
> -------------------------------------------------------
> 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
>
|
|
From: Leif M. <le...@ta...> - 2004-12-06 09:54:12
Attachments:
sh.script.in
|
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
>>
|
|
From: <ste...@ce...> - 2004-12-06 15:21:30
|
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
>
>
|
|
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
>
|
|
From: Leif M. <le...@ta...> - 2004-12-07 00:03:52
|
Stephane,
I have not been able to test this new script anywhere other than
linux at this point. It
may have problems on other platforms still. What platform are you
running on?
In answer to your first question. It should still work on any
directory layout. The
script builds a fully qualified path by looking at the location of the
script and then
modifying the PIDDIR variable so that it is absolute. Take a look at
the following:
REALDIR=`pwd`
FIRST_CHAR=`echo $PIDDIR | cut -c1,1`
if [ "$FIRST_CHAR" != "/" ]
then
PIDDIR=$REALDIR/$PIDDIR
fi
That and a similar section for the location of the configuration
file are the only
changes. The error you are getting is most likely being caused by this
code.
You may also be having problems with the line feeds of the script.
Make sure
that is correct after you copied the script from my last mail.
Cheers,
Leif
Stéphane RIFF wrote:
> 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
>>>
>>
|
|
From: <nic...@uk...> - 2004-12-07 10:54:56
|
you probably need to dos2unix the file....
-Nick
Internet
ste...@ce...@lists.sourceforge.net - 06/12/2004 15:40
Please respond to wra...@li...
Sent by: wra...@li...
To: wrapper-user
cc:
Subject: Re: [SPAM] - Re: [SPAM] - Re: [Wrapper-user] PIDFILE +
wrapper.working.dir - Bayesian Filter detected spam - Found word(s)
list error remove in the Text body.
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=E9phane 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=E9phane 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=3D"../"
>>> In sh.script : PIDDIR=3D"."
>>>
>>> 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=E9phane RIFF wrote:
>>>>
>>>>> I have problem with the pid file :
>>>>> in sh.script.in i have PIDDIR=3D".", 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=3D"@app.name@"
>> APP_LONG_NAME=3D"@app.long.name@"
>>
>> # Wrapper
>> WRAPPER_CMD=3D"./wrapper"
>> WRAPPER_CONF=3D"../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=3D
>>
>> # Location of the pid file.
>> PIDDIR=3D"."
>>
>> # 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=3Dtrue
>>
>> # 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=3D
>>
>> # 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=3D"$0"
>> ;;
>> *)
>> PWD=3D`pwd`
>> SCRIPT=3D"$PWD/$0"
>> ;;
>> esac
>>
>> # Change spaces to ":" so the tokens can be parsed.
>> SCRIPT=3D`echo $SCRIPT | sed -e 's; ;:;g'`
>> # Get the real path to this script, resolving any symbolic links
>> TOKENS=3D`echo $SCRIPT | sed -e 's;/; ;g'`
>> REALPATH=3D
>> for C in $TOKENS; do
>> REALPATH=3D"$REALPATH/$C"
>> while [ -h "$REALPATH" ] ; do
>> LS=3D"`ls -ld "$REALPATH"`"
>> LINK=3D"`expr "$LS" : '.*-> \(.*\)$'`"
>> if expr "$LINK" : '/.*' > /dev/null; then
>> REALPATH=3D"$LINK"
>> else
>> REALPATH=3D"`dirname "$REALPATH"`""/$LINK"
>> fi
>> done
>> done
>> # Change ":" chars back to spaces.
>> REALPATH=3D`echo $REALPATH | sed -e 's;:; ;g'`
>>
>> # Change the current directory to the location of the script
>> cd "`dirname "$REALPATH"`"
>> REALDIR=3D`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=3D`echo $PIDDIR | cut -c1,1`
>> if [ "$FIRST_CHAR" !=3D "/" ]
>> then
>> PIDDIR=3D$REALDIR/$PIDDIR
>> fi
>> # Same test for WRAPPER_CONF
>> FIRST_CHAR=3D`echo $WRAPPER_CONF | cut -c1,1`
>> if [ "$FIRST_CHAR" !=3D "/" ]
>> then
>> WRAPPER_CONF=3D$REALDIR/$WRAPPER_CONF
>> fi
>>
>> # Process ID
>> ANCHORFILE=3D"$PIDDIR/$APP_NAME.anchor"
>> PIDFILE=3D"$PIDDIR/$APP_NAME.pid"
>> pid=3D""
>>
>> # Resolve the location of the 'ps' command
>> PSEXE=3D"/usr/bin/ps"
>> if [ ! -x $PSEXE ]
>> then
>> PSEXE=3D"/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" =3D "X" ]
>> then
>> CMDNICE=3D""
>> else
>> CMDNICE=3D"nice -$PRIORITY"
>> fi
>>
>> # Check the configured user
>> if [ "X$RUN_AS_USER" !=3D "X" ]
>> then
>> # Resolve the location of the 'id' command
>> IDEXE=3D"/usr/xpg4/bin/id"
>> if [ ! -x $IDEXE ]
>> then
>> IDEXE=3D"/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`" =3D "$RUN_AS_USER" ]
>> then
>> # Already running as the configured user. Avoid password
>> prompts by not calling su.
>> RUN_AS_USER=3D""
>> fi
>> fi
>>
>> getpid() {
>> if [ -f $PIDFILE ]
>> then
>> if [ -r $PIDFILE ]
>> then
>> pid=3D`cat $PIDFILE`
>> if [ "X$pid" !=3D "X" ]
>> then
>> # Verify that a process with this pid is still running.
>> pid=3D`$PSEXE -p $pid | grep $pid | grep -v grep | awk
>> '{print $1}' | tail -1`
>> if [ "X$pid" =3D "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=3D`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}'
>> | tail -1`
>> if [ "X$pid" =3D "X" ]
>> then
>> # Process is gone so remove the pid file.
>> rm -f $PIDFILE
>> fi
>> }
>>
>> console() {
>> echo "Running $APP_LONG_NAME..."
>> getpid
>> if [ "X$pid" =3D "X" ]
>> then
>> if [ "X$IGNORE_SIGNALS" =3D "X" ]
>> then
>> exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF
>> wrapper.pidfile=3D$PIDFILE
>> else
>> exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF
>> wrapper.pidfile=3D$PIDFILE wrapper.anchorfile=3D$ANCHORFILE
>> fi
>> else
>> echo "$APP_LONG_NAME is already running."
>> exit 1
>> fi
>> }
>>
>> start() {
>> echo "Starting $APP_LONG_NAME..."
>> getpid
>> if [ "X$pid" =3D "X" ]
>> then
>> if [ "X$IGNORE_SIGNALS" =3D "X" ]
>> then
>> if [ "X$RUN_AS_USER" =3D "X" ]
>> then
>> exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF
>> wrapper.pidfile=3D$PIDFILE wrapper.daemonize=3DTRUE
>> else
>> su -m $RUN_AS_USER -c "exec $CMDNICE $WRAPPER_CMD
>> $WRAPPER_CONF wrapper.pidfile=3D$PIDFILE wrapper.daemonize=3DTRUE"
>> fi
>> else
>> if [ "X$RUN_AS_USER" =3D "X" ]
>> then
>> exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF
>> wrapper.pidfile=3D$PIDFILE wrapper.anchorfile=3D$ANCHORFILE
>> wrapper.ignore_signals=3DTRUE wrapper.daemonize=3DTRUE
>> else
>> su -m $RUN_AS_USER -c "exec $CMDNICE $WRAPPER_CMD
>> $WRAPPER_CONF wrapper.pidfile=3D$PIDFILE wrapper.anchorfile=3D$ANCHORFILE
>> wrapper.ignore_signals=3DTRUE wrapper.daemonize=3DTRUE"
>> fi
>> fi
>> else
>> echo "$APP_LONG_NAME is already running."
>> exit 1
>> fi
>> }
>>
>> stopit() {
>> echo "Stopping $APP_LONG_NAME..."
>> getpid
>> if [ "X$pid" =3D "X" ]
>> then
>> echo "$APP_LONG_NAME was not running."
>> else
>> if [ "X$IGNORE_SIGNALS" =3D "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=3D$pid
>> CNT=3D0
>> TOTCNT=3D0
>> while [ "X$pid" !=3D "X" ]
>> do
>> # Loop for up to 5 minutes
>> if [ "$TOTCNT" -lt "300" ]
>> then
>> if [ "$CNT" -lt "5" ]
>> then
>> CNT=3D`expr $CNT + 1`
>> else
>> echo "Waiting for $APP_LONG_NAME to exit..."
>> CNT=3D0
>> fi
>> TOTCNT=3D`expr $TOTCNT + 1`
>>
>> sleep 1
>>
>> testpid
>> else
>> pid=3D
>> fi
>> done
>>
>> pid=3D$savepid
>> testpid
>> if [ "X$pid" !=3D "X" ]
>> then
>> echo "Timed out waiting for $APP_LONG_NAME to exit."
>> echo " Attempting a forced exit..."
>> kill -9 $pid
>> fi
>>
>> pid=3D$savepid
>> testpid
>> if [ "X$pid" !=3D "X" ]
>> then
>> echo "Failed to stop $APP_LONG_NAME."
>> exit 1
>> else
>> echo "Stopped $APP_LONG_NAME."
>> fi
>> fi
>> }
>>
>> status() {
>> getpid
>> if [ "X$pid" =3D "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" =3D "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
>
-------------------------------------------------------
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
This message and any attachments (the "message") is=20
intended solely for the addressees and is confidential.=20
If you receive this message in error, please delete it and=20
immediately notify the sender. Any use not in accord with
its purpose, any dissemination or disclosure, either whole=20
or partial, is prohibited except formal approval. The internet=20
can not guarantee the integrity of this message.=20
BNP PARIBAS (and its subsidiaries) shall (will) not=20
therefore be liable for the message if modified.=20
***************************************************************************=
*******************
BNP Paribas Private Bank London Branch is authorised=20
by CECEI & AMF and is regulated by the Financial Services
Authority for the conduct of its investment business in the
United Kingdom.
BNP Paribas Securities Services London Branch is authorised
by CECEI & AMF and is regulated by the Financial Services
Authority for the conduct of its investment business in the=20
United Kingdom.
=20
BNP Paribas Fund Services UK Limited is authorised and=20
regulated by the Financial Services Authority.
|