Среди прочих приятных мелочей в 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 ...