tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Peter Bieringer" ...@bieringer.de>
Subject improvement for changed PID file handling in catalina.sh since 6.0.24
Date Mon, 09 Aug 2010 13:36:04 GMT
Hi, 

the PID file handling was changed in 6.0.24 in catalina.sh, which avoid the 
use of an initscript to start tomcat proper (e.g. on CentOS/RHEL5). 
catalina.sh is currently too strict regarding existing PID file and has imho 
a too lightweight check. 

Below is a patch which improves the PID file handling. 

It fixes 2 issues. 

Issue 1: tomcat won't start, if initscript has already created as root a PID 
file and changed permissions, that user tomcat would able to write it's PID 
into this file. 

Fix: check existing PID file whether it's non-empty and if yes, check, 
whether PID is stale 


Issue 2: catalina.sh unconditionally tries to remove the given PID file, not 
testing the case that it has no write access to the directory (e.g. 
/var/run). 

Fix: check before removing a PID file (because this needs write access to 
pid file directory, which is e.g. /var/run, were user tomcat has no write 
access) 

Pls. include this fix into upstream, thank you. 

   Peter 

 --- catalina.sh 2010-07-19 12:59:45.000000000 +0000
+++ catalina.sh 2010-08-09 13:00:56.000000000 +0000
@@ -311,9 +311,15 @@
 elif [ "$1" = "start" ] ; then 

   if [ ! -z "$CATALINA_PID" ]; then
 -    if [ -f "$CATALINA_PID" ]; then
 -      echo "PID file ($CATALINA_PID) found. Is Tomcat still running? Start 
aborted."
 -      exit 1
+    if [ -f "$CATALINA_PID" -a -s "$CATALINA_PID" ]; then
+      echo "Non-empty PID file ($CATALINA_PID) found. Is Tomcat still 
running?"
+      pid="`cat "$CATALINA_PID"`"
+      if ps -p $pid >/dev/null; then
+        echo "Tomcat is probably still running with PID $pid! Start 
aborted."
+        exit 1
+      else
+        echo "Tomcat is no longer running (stale PID file)."
+      fi
     fi
   fi 

@@ -393,7 +399,11 @@
       while [ $SLEEP -ge 0 ]; do
         kill -0 `cat $CATALINA_PID` >/dev/null 2>&1
         if [ $? -gt 0 ]; then
 -          rm $CATALINA_PID
+          if [ -w `dirname "$CATALINA_PID"` ]; then
+            rm $CATALINA_PID
+          else
+            echo "Non-removable PID file found ($CATALINA_PID)."
+          fi
           break
         fi
         if [ $SLEEP -gt 0 ]; then
@@ -416,7 +426,11 @@
       if [ -f "$CATALINA_PID" ]; then
         echo "Killing: `cat $CATALINA_PID`"
         kill -9 `cat $CATALINA_PID`
 -        rm $CATALINA_PID
+        if [ -w `dirname "$CATALINA_PID"` ]; then
+          rm $CATALINA_PID
+        else
+          echo "Non-removable PID file found ($CATALINA_PID)."
+        fi
       fi
     fi
   fi

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message