Home > Mobile >  How to check whether tomcat server is started up
How to check whether tomcat server is started up

Time:10-29

I want to check if tomcat server is really started up. When you start tomcat, you get an entry like "Server startup" in catalina.out. Once I got this, the script should go ahead.

That's my code

 echo "Waiting for Tomcat"
 if [ $(tail -f /home/0511/myapp/logs/catalina.out | grep "Server startup" | wc -l) -eq 1 ]; then
    echo "Tomcat started"
 fi
#further code...

Output:

Waiting for Tomcat
|

So, I am sure, after 30-60 seconds, the "tail .. | wc -l" gets 1. However, I cannot match it with my code above. Nothing happens, I have to interrupt per CTRL C.

What is wrong or is there any better solution for my intention?

CodePudding user response:

Try this:

while true;do
  if tail -n 100 /home/0511/myapp/logs/catalina.out | grep -q "Server 
    startup";then
    echo "Tomcat started"
    exit 0
  fi
done

So you constantly check the last 100 lines from the log, and if match, exit with a message.


Another (more elegant) solution without a loop:

if tail -f /home/0511/myapp/logs/catalina.out | grep -q "Server 
    startup";then
   echo "Tomcat started"
fi

CodePudding user response:

You said "I want to check if tomcat server is really started up". If you check the log with tail and grep, in worst case scenario, you could detect an old start which ended with a crash.

Tomcat server when is started it is listening to a certain port(e.g. 8080). So you should check if tomcat server is listening on that port.

If you are using a different port replace 8080 in following lines with your custom port.

In order to display tomcat status you should use netstat. Example of a line returned by netstat:

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

In order to display only if Tomcat is started or not, you could use:

netstat -an|grep -e ":8080[^0-9].*[0-9].*LISTENING" && echo "Tomcat started" || echo "Tomcat not started"

The grep expression matches ":" followed by port 8080, followed by non-digit, followed by any characters, followed by digit, followed by any characters, followed by "LISTENING".

In order to wait for Tomcat you could use:

echo Waiting for Tomcat port to be ... 
until netstat -an | grep -e ":8080[^0-9].*[0-9].*LISTENING" > /dev/null ; do 
  sleep 1 ; 
done
echo Tomcat started

CodePudding user response:

grep doesn't exit as soon as it found a match; it keeps reading for further matches.

To make grep not produce any output, but instead exit with 0 status as soon as a match is found, use the -q option:

 if [ tail -f /home/0511/myapp/logs/catalina.out | grep -q "Server startup" ]; then

That said, a log message isn't the most reliable way to check if a server is actually up and serving. Instead, you could try, for example, repeatedly polling it with curl instead.

  • Related