Задача — определить порт для коннекторов во время запуска 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 ...
Готово.