Контроль Tomcat з керівником


14

Чи є спосіб «витончено» відключити tomcat при контролі через наглядача?

Я розумію, що сценарій Tomcat shutdown.sh розмовляє з tomcat на порту закриття, щоб ініціювати витончене відключення. Схоже, у супервізора немає способу вказати "команду" відключення, лише використовуючи сигнали.

Хтось успішно використовував супервізор з tomcat?

Крім того, оскільки сценарій startc.sh tomcat ініціює процес java, я копіював отриману команду java безпосередньо в супервізор, але це не так приємно, як використовувати сценарій startup.sh через всі налаштування середовища. Чи є спосіб отримати керівника для використання сценарію startup.sh, але все ж відстежувати отриманий дочірній процес Java?

Відповіді:


6

Дякую Марку за посилання на цей сценарій; ось мій робочий приклад для CentOS:

#!/bin/bash
# Source: https://confluence.atlassian.com/plugins/viewsource/viewpagesrc.action?pageId=252348917
function shutdown()
{
    date
    echo "Shutting down Tomcat"
    unset CATALINA_PID # Necessary in some cases
    unset LD_LIBRARY_PATH # Necessary in some cases
    unset JAVA_OPTS # Necessary in some cases

    $TOMCAT_HOME/bin/catalina.sh stop
}

date
echo "Starting Tomcat"
export CATALINA_PID=/tmp/$$
export JAVA_HOME=/usr/local/java
export LD_LIBRARY_PATH=/usr/local/apr/lib
export JAVA_OPTS="-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.password.file=/etc/tomcat.jmx.pwd -Dcom.sun.management.jmxremote.access.file=/etc/tomcat.jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Xms128m -Xmx3072m -XX:MaxPermSize=256m"

# Uncomment to increase Tomcat's maximum heap allocation
# export JAVA_OPTS=-Xmx512M $JAVA_OPTS

. $TOMCAT_HOME/bin/catalina.sh start

# Allow any signal which would kill a process to stop Tomcat
trap shutdown HUP INT QUIT ABRT KILL ALRM TERM TSTP

echo "Waiting for `cat $CATALINA_PID`"
wait `cat $CATALINA_PID`

І ось що я використав у /etc/supervisord.conf:

[program:tomcat]
directory=/usr/local/tomcat
command=/usr/local/tomcat/bin/supervisord_wrapper.sh
stdout_logfile=syslog
stderr_logfile=syslog
user=apache

Працюючи, це виглядає приблизно так:

[root@qa1.qa:~]# supervisorctl start tomcat
tomcat: started
[root@qa1.qa:~]# supervisorctl status
tomcat                           RUNNING    pid 9611, uptime 0:00:03
[root@qa1.qa:~]# ps -ef|grep t[o]mcat
apache    9611  9581  0 13:09 ?        00:00:00 /bin/bash /usr/local/tomcat/bin/supervisord_wrapper.sh start
apache    9623  9611 99 13:09 ?        00:00:10 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.password.file=/etc/tomcat.jmx.pwd -Dcom.sun.management.jmxremote.access.file=/etc/tomcat.jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Xms128m -Xmx3072m -XX:MaxPermSize=256m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

Спочатку я намагався додати ці змінні середовища в /etc/supervisord.conf через environmentдирективу, але зіткнувся з проблемою з JAVA_OPTS з усіма пробілами та знаками рівності. Поклавши це в сценарій обгортки, це подбало про це.

Сподіваюся, це допоможе заощадити когось іншого на деякий час!


1
Я можу підтвердити, що це працює з Tomcat 7 в supervisord v3.0 на CentOS 6. Зауважте, що startв кінці команди в /etc/supervisord.conf це непотрібний аргумент, оскільки сценарій нічого з цим не робить.
Рік Ганлон II

Га, дякую за улов! Раніше я передавав це разом з catalina.sh. Я її зняв.
Аарон Р.

20

У catalina.sh є команда "run". Це прекрасно працює з керівником:

[program:tomcat]
command=/path/to/tomcat/bin/catalina.sh run
process_name=%(program_name)s
startsecs=5
stopsignal=INT
user=tomcat
redirect_stderr=true
stdout_logfile=/var/log/tomcat.log

Запуск tomcat як "catalina.sh run" працює на передньому плані, має правильний pid і приймає сигнали. Чудово працює з наглядом.


1
Це має бути прийнятою відповіддю.
MaratC

Я отримую "Не вдається запустити сервер. Екземпляр сервера не налаштований"
xtian

0

Схоже, у супервізора немає способу вказати "команду" відключення, лише використовуючи сигнали.

Ви намагалися використовувати stopsignal=QUIT?

[program:tomcat]
command=java ...
process_name=tomcat
priority=150
startsecs=10
directory=./
stopsignal=QUIT
stdout_logfile=./logs/tomcat.log
stderr_logfile=./logs/tomcat.err

схоже, QUIT змушує tomcat робити дамп потоку в журнал catalina.out (ака-консоль).
Марк

1
Це цікава пропозиція: confluence.atlassian.com/plugins/viewsource/… - По суті, загорніть catalina.sh у сценарій та встановіть функцію пастки для відключення ...
Марк

@Mark Це для запуску на OSX, як це можна адаптувати для супервізора?
Conrad.Dean

1
@ Conrad.Dean керівник використовує ті самі припущення. Цей же сценарій працює для супервізора без змін
Марк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.