Tomcat: трюки – использование переменной CATALINA_PID

Автор: | 29/05/2014

apache-tomcat-7-logoСреди прочих приятных мелочей в Apache Tomcat – есть такая переменная, как CATALINA_PID.

Единственная её задача – хранение значения PID (Process ID) запущенного сервера Tomcat, который потом можно использовать для разных полезных вещей – например, получать jstack, вызывая его через скрипт, или проверять статус Tomcat-a (запущен/остановлен).

Рассмотрим пример использования.

Устанавливаем переменную:

$ echo "export CATALINA_PID="$CATALINA_HOME/conf/catalina.pid"" >> ~/.bashrc

$ tail -n 1 ~/.bashrc
export CATALINA_PID=/home/tomcats/apache-tomcat-7.0.53/conf/catalina.pid

Перечитаем файл, что бы переменная передалась:

$ . ~/.bashrc
$ echo $CATALINA_PID
/home/tomcats/apache-tomcat-7.0.53/conf/catalina.pid

Теперь – запускаем Tomcat:

$ ./bin/startup.sh
Using CATALINA_BASE:   /home/tomcats/apache-tomcat-7.0.53
Using CATALINA_HOME:   /home/tomcats/apache-tomcat-7.0.53
Using CATALINA_TMPDIR: /home/tomcats/apache-tomcat-7.0.53/temp
Using JRE_HOME:        /usr/java/jdk1.6.0_45/jre/
Using CLASSPATH:       /home/tomcats/apache-tomcat-7.0.53/bin/bootstrap.jar:/home/tomcats/apache-tomcat-7.0.53/bin/tomcat-juli.jar
Using CATALINA_PID:    /home/tomcats/apache-tomcat-7.0.53/conf/catalina.pid
Tomcat started.

В стеке запуска видно, что появилась новая строка:

Using CATALINA_PID:    /home/tomcats/apache-tomcat-7.0.53/conf/catalina.pid

Проверим содержимое:

$ cat /home/tomcats/apache-tomcat-7.0.53/conf/catalina.pid
6981

Проверим Tomcat:

$ ps ux | grep tomcat
tomcats   6981  6.2  1.3 3576680 106700 pts/0  Sl   15:46   0:04 /usr/java/jdk1.6.0_45/jre//bin/java -Djava.util.logging.config.file=/home/tomcats/apache-tomcat-7.0.53/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms1G -Xmx1G -XX:+UseCodeCacheFlushing -XX:ReservedCodeCacheSize=64M -XX:+HeapDumpOnOutOfMemoryError -XX:MaxPermSize=1024M -Denv=DEV -Doutput.dir= -Dport.http=8083 -Djava.endorsed.dirs=/home/tomcats/apache-tomcat-7.0.53/endorsed -classpath /home/tomcats/apache-tomcat-7.0.53/bin/bootstrap.jar:/home/tomcats/apache-tomcat-7.0.53/bin/tomcat-juli.jar -Dcatalina.base=/home/tomcats/apache-tomcat-7.0.53 -Dcatalina.home=/home/tomcats/apache-tomcat-7.0.53 -Djava.io.tmpdir=/home/tomcats/apache-tomcat-7.0.53/temp org.apache.catalina.startup.Bootstrap start

Или так:

$ ps ux | grep tomcat | awk '{print $2}' | head -n 1
6981

И дальше можем его использовать как угодно:

$ i=`cat /home/tomcats/apache-tomcat-7.0.53/conf/catalina.pid`
$ echo $i
6981
$ jstack -F -l $i
Attaching to process ID 6981, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.45-b01
...