You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Aleksi Kallio <ak...@csc.fi> on 2002/07/17 13:13:51 UTC

How to do stop-start fast?

I have a script that stops Tomcat (shutdown.sh), does stuff and then
restarts it (startup.sh). Doing stuff doesn't take long enough and
Tomcat refuses to restart because the port is still reserved.

Removing the restart from script and waiting a few secs after running
the script, then restarting manually, works. It is just a bit
frustrating. Also if a restart too early, Tomcat fails to start and
produces a process that has to be killed by hand and it's also frustrating.

How to check if Tomcat is stopped properly?





--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: How to do stop-start fast?

Posted by Aleksi Kallio <ak...@csc.fi>.
After a couple of fixes the script started working, but Tomcat still 
hangs. So I guess netstat can't be used for that. Anyway, I have a 
simple "sleep 3" hack that works perfectly, so this is not an issue...

> Something like this may work (just a quick hack so there may be typos)
> 
> --start cut here for script
> #!/bin/sh
> ###################################
> # restart.sh
> # restarts tomcat
> # usage: restart.sh ip port
> #    ip   - The ip address (or *)
> #    port - Which tomcat listens on shutdown
> #
> #  eg: restart.sh '*' 8005
> #      restart.sh 127.0.0.1  8005
> #      restart.sh 192.168.0.100  8005
> #      restart.sh 207.46.230.218  8005
> ###################################
> 
> 
> #######################################
> # Function to check it tomcat is running
> # I run wacky UNIX flavor so you netstat
> # may differ from mine
> # side effect: sets variable IS_RUNNING
> # to signify tomcat is listening on port
> #######################################
> TC_check()
> {
>   Q="$ADDRESS.$PORT"
>   # Grep wants tcp connection that are Listening on the port/address
>   IS_RUNNING=`netstat -an|egrep '^tcp'|grep LISTEN|grep "$Q"|wc -l`
> }
> 
> 
> ###################################
> # First - is there a TOMCAT_HOME
> # so I can call shutdown?
> 
> if test "$TOMCAT_HOME" = "" ; then
>   echo "TOMCAT_HOME not defined!"
>   exit 2
> fi
> 
> ###################################
> # Now check the incoming args
> ADDRESS=$1
> PORT=$2
> 
> if test "$ADDRESS" = "" ; then
>   echo "In valid arg - no address given!"
>   exit 2
> fi
> 
> if test "$PORT" = "" ; then
>   echo "In valid arg - no port given!"
>   exit 2
> fi
> 
> 
> ###################################
> # Now for the fun
> TC_check
> if [ IS_RUNNING -eq 1 ] ; then
>   echo "Its running - let's shutdown"
>   $TOMCAT_HOME/bin/shutdown.sh
>   TC_check
> fi
> 
> 
> while [ IS_RUNNING -eq 1 ] ; do
>   echo "Still running"
>   sleep 1
>   TC_check
> done
> 
> echo "Now startup ..."
> $TOMCAT_HOME/bin/startup.sh
> ######################################################################
> # End of script
> ######################################################################
> 
> Aleksi Kallio wrote:
> 
>> Thanks for your fast reply! The netstat alternative seems reasonable. 
>> I'm quite new to Unix (server is running Red Hat Linux, shell is csh) 
>> and have problems implementing the script.
>>
>> Getting the netstat listing and grepping it is no problem, but how I 
>> can loop in a shell script while "netstat -l | grep '8442'" returns 
>> something ie. socket is alive (8442 is the port number)?
>>
>>> You have a few alternatives:
>>> 1) Kill the java process and then you can run startup.sh immediatetly
>>> 2) Write a wrapper script which calls shutdown.sh, then does one of 
>>> the following to verify tomcat is shutdown before calling startup.sh
>>>   a) The process is non-existent
>>>   b) The port is no taken (use netstat)
>>>   c) Parse catalina.out for the phrase saying tomcat was shutdown
>>>
>>> -Tim
>>>
>>>
>>> Aleksi Kallio wrote:
>>>
>>>> I have a script that stops Tomcat (shutdown.sh), does stuff and then
>>>> restarts it (startup.sh). Doing stuff doesn't take long enough and
>>>> Tomcat refuses to restart because the port is still reserved.
>>>>
>>>> Removing the restart from script and waiting a few secs after running
>>>> the script, then restarting manually, works. It is just a bit
>>>> frustrating. Also if a restart too early, Tomcat fails to start and
>>>> produces a process that has to be killed by hand and it's also 
>>>> frustrating.
>>>>
>>>> How to check if Tomcat is stopped properly?
>>>>
>>>>  
>>>
>>>
>>>
>>>
>>>
>>> -- 
>>> To unsubscribe, e-mail:   
>>> <ma...@jakarta.apache.org>
>>> For additional commands, e-mail: 
>>> <ma...@jakarta.apache.org>
>>
>>
>>
>>
>>
>>
>>
> 
> 
> 
> -- 
> To unsubscribe, e-mail:   
> <ma...@jakarta.apache.org>
> For additional commands, e-mail: 
> <ma...@jakarta.apache.org>




--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: How to do stop-start fast?

Posted by Tim Funk <fu...@joedog.org>.
Something like this may work (just a quick hack so there may be typos)

--start cut here for script
#!/bin/sh
###################################
# restart.sh
# restarts tomcat
# usage: restart.sh ip port
#    ip   - The ip address (or *)
#    port - Which tomcat listens on shutdown
#
#  eg: restart.sh '*' 8005
#      restart.sh 127.0.0.1  8005
#      restart.sh 192.168.0.100  8005
#      restart.sh 207.46.230.218  8005
###################################


#######################################
# Function to check it tomcat is running
# I run wacky UNIX flavor so you netstat
# may differ from mine
# side effect: sets variable IS_RUNNING
# to signify tomcat is listening on port
#######################################
TC_check()
{
   Q="$ADDRESS.$PORT"
   # Grep wants tcp connection that are Listening on the port/address
   IS_RUNNING=`netstat -an|egrep '^tcp'|grep LISTEN|grep "$Q"|wc -l`
}


###################################
# First - is there a TOMCAT_HOME
# so I can call shutdown?

if test "$TOMCAT_HOME" = "" ; then
   echo "TOMCAT_HOME not defined!"
   exit 2
fi

###################################
# Now check the incoming args
ADDRESS=$1
PORT=$2

if test "$ADDRESS" = "" ; then
   echo "In valid arg - no address given!"
   exit 2
fi

if test "$PORT" = "" ; then
   echo "In valid arg - no port given!"
   exit 2
fi


###################################
# Now for the fun
TC_check
if [ IS_RUNNING -eq 1 ] ; then
   echo "Its running - let's shutdown"
   $TOMCAT_HOME/bin/shutdown.sh
   TC_check
fi


while [ IS_RUNNING -eq 1 ] ; do
   echo "Still running"
   sleep 1
   TC_check
done

echo "Now startup ..."
$TOMCAT_HOME/bin/startup.sh
######################################################################
# End of script
######################################################################

Aleksi Kallio wrote:
> Thanks for your fast reply! The netstat alternative seems reasonable. 
> I'm quite new to Unix (server is running Red Hat Linux, shell is csh) 
> and have problems implementing the script.
> 
> Getting the netstat listing and grepping it is no problem, but how I can 
> loop in a shell script while "netstat -l | grep '8442'" returns 
> something ie. socket is alive (8442 is the port number)?
> 
>> You have a few alternatives:
>> 1) Kill the java process and then you can run startup.sh immediatetly
>> 2) Write a wrapper script which calls shutdown.sh, then does one of 
>> the following to verify tomcat is shutdown before calling startup.sh
>>   a) The process is non-existent
>>   b) The port is no taken (use netstat)
>>   c) Parse catalina.out for the phrase saying tomcat was shutdown
>>
>> -Tim
>>
>>
>> Aleksi Kallio wrote:
>>
>>> I have a script that stops Tomcat (shutdown.sh), does stuff and then
>>> restarts it (startup.sh). Doing stuff doesn't take long enough and
>>> Tomcat refuses to restart because the port is still reserved.
>>>
>>> Removing the restart from script and waiting a few secs after running
>>> the script, then restarting manually, works. It is just a bit
>>> frustrating. Also if a restart too early, Tomcat fails to start and
>>> produces a process that has to be killed by hand and it's also 
>>> frustrating.
>>>
>>> How to check if Tomcat is stopped properly?
>>>
>>>  
>>
>>
>>
>>
>> -- 
>> To unsubscribe, e-mail:   
>> <ma...@jakarta.apache.org>
>> For additional commands, e-mail: 
>> <ma...@jakarta.apache.org>
> 
> 
> 
> 
> 
> 



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: How to do stop-start fast?

Posted by Tim Funk <fu...@joedog.org>.
You have a few alternatives:
1) Kill the java process and then you can run startup.sh immediatetly
2) Write a wrapper script which calls shutdown.sh, then does one of the 
following to verify tomcat is shutdown before calling startup.sh
   a) The process is non-existent
   b) The port is no taken (use netstat)
   c) Parse catalina.out for the phrase saying tomcat was shutdown

-Tim


Aleksi Kallio wrote:
> I have a script that stops Tomcat (shutdown.sh), does stuff and then
> restarts it (startup.sh). Doing stuff doesn't take long enough and
> Tomcat refuses to restart because the port is still reserved.
> 
> Removing the restart from script and waiting a few secs after running
> the script, then restarting manually, works. It is just a bit
> frustrating. Also if a restart too early, Tomcat fails to start and
> produces a process that has to be killed by hand and it's also frustrating.
> 
> How to check if Tomcat is stopped properly?
> 
>  


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>