Задача – определить порт для коннекторов во время запуска Apache Tomcat.
Имеется сервер, на котором запускается несколько экземпляров Tomcat
, от разных пользователей.
У каждого пользователя есть свой скрипт startup.sh
, расположенный, к примеру, в домашней директории – в нём мы создадим перебор переменной ENV
(environment) -и в зависимости от неё будем задавать порты Tomcat-а.
Переменная ENV
задаётся в файле .profile
или .bashrc
пользователя:
$ cat ~/.bashrc | grep ENV export ENV="DEV"
Необходимо менять порты для команды shutdown
, порты коннекторов HTTP
и HTTPS
.
Редактируем файл server.xml
, в котором указываем:
<Server port="${port.shutdown}" shutdown="SHUTDOWN">
<Connector port="${port.http}" maxHttpHeaderSize="8192" ...
<Connector port="${port.https}" maxHttpHeaderSize="8192" ...
Проверяем наличие переменной ENV
:
$ echo $ENV DEV
Далее – редактируем наш скрипт запуска, в котором и будут определяться порты в зависимости от ENV
:
$ cat bin/startup.sh #!/bin/sh if [ $ENV == DEV ]; then port_shutdown="8005" port_http="8080" port_https="8443" elif [ $ENV == SIT ]; then port_shutdown="8006" port_http="8081" port_https="8444" elif [ $ENV == UAT ]; then port_shutdown="8007" port_http="8082" port_https="8445" else echo "Unknown ENV" exit 1 fi export CATALINA_OPTS=" ${SYSTEM_PROPS} -d64 -server -Xms$SMEMORY -Xmx$XMEMORY -XX:+UseCodeCacheFlushing -XX:ReservedCodeCacheSize=64M -XX:+HeapDumpOnOutOfMemoryError -XX:MaxPermSize=1024M -Denv=${ENV} -Doutput.dir=${OUTPUT_DIR} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.***.***.239 -Dport.http=${port_http} -Dport.https=${port_https} -Dport.shutdown=${port_shutdown}" exec $CATALINA_HOME/bin/startup.sh
В последней строке передачи аргументов JVM – мы и передаём переменные, в которых указаны порты:
-Dport.http=${port_http} -Dport.https=${port_https} -Dport.shutdown=${port_shutdown}"
Следует ещё раз уточнить – это скрипт не в директории Tomcat-а, а в директории пользователя. Хотя – абсолютно ничто не мешает те же опции задать через скрипт запуска $CATALINA_HOME/bin/startup.sh
.
Запускаем:
$ ./bin/startup.sh ENV is KIEV_DEV; Using CATALINA_BASE: /home/user/apache-tomcat-5.5.36 Using CATALINA_HOME: /home/user/apache-tomcat-5.5.36 Using CATALINA_TMPDIR: /home/user/apache-tomcat-5.5.36/temp Using JRE_HOME: /usr/java/jdk1.6.0_45/jre/ Using CLASSPATH: /home/user/apache-tomcat-5.5.36/bin/bootstrap.jar
Проверяем лог:
$ tail -n 20 ../apache-tomcat-5.5.36/logs/catalina.out | grep HTTP INFO: Starting Coyote HTTP/1.1 on http-8080 INFO: Starting Coyote HTTP/1.1 on http-8443
Проверяем порты в системе:
$ netstat -anp | grep java (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) ... tcp 0 0 :::8080 :::* LISTEN 16631/java tcp 0 0 :::8443 :::* LISTEN 16631/java ...
Готово.