Вопрос: Управление комом с супервизором


Есть ли способ «изящно» выключить tomcat при управлении через супервизора?

Мое понимание заключается в том, что сценарий shutdown.sh Tomcat говорит с tomcat о порте выключения, чтобы инициировать изящное завершение работы. Супервизор, похоже, не имеет способа указать команду «shutdown», используя только сигналы.

Кто-нибудь успешно использовал супервизора с tomcat?

Кроме того, поскольку сценарий startup.sh tomcat инициирует java-процесс, я копировал полученную команду java непосредственно в супервизор, но это не так хорошо, как использование скрипта startup.sh из-за всей настройки среды. Есть ли способ заставить супервизора использовать скрипт startup.sh, но все же отслеживать полученный дочерний Java-процесс?


12
2017-09-06 23:11


Источник




Ответы:


Спасибо Mark за ссылку на этот скрипт; вот мой рабочий пример для 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, со всеми пробелами и равными знаками. Поместив его в сценарий оболочки, он позаботился об этом.

Надеюсь, это поможет спасти кого-то еще некоторое время!


6
2018-06-24 20:22



Я могу подтвердить, что это работает с Tomcat 7 в супервизор v3.0 на CentOS 6. Обратите внимание, что start в конце команды в /etc/supervisord.conf является ненужным аргументом, так как скрипт ничего не делает с ним. - Rick Hanlon II
Ха, спасибо за улов! Раньше я это передавал каталине. Я удалил его. - Aaron R.


В 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

Комод работает как «catalina.sh run» работает на переднем плане, имеет правильный pid и принимает сигналы. Прекрасно работает с supervisord.


19
2018-02-03 11:47



Это должен быть принятый ответ. - MaratC
Я получаю «Не удается запустить сервер. Экземпляр сервера не настроен» - xtian


Супервизор, похоже, не имеет способа указать команду «shutdown shutdown»,   используя только сигналы.

Вы пытались использовать 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

0
2017-09-07 03:54



похоже, что QUIT заставляет tomcat делать свалку потока в журнале catalina.out (aka console). - Mark
Это интересное предложение: confluence.atlassian.com/plugins/viewsource/... - По сути, wrap Catalina.sh в скрипте и установить функцию ловушки для выключения ... - Mark
@Mark это для запуска на OSX, как его можно адаптировать для супервизора? - Conrad.Dean
@ Руководитель Conrad.Dean использует те же предположения. Тот же скрипт работает для супервизора без каких-либо изменений - Mark