Kontrolowanie tomcat z przełożonym

14

Czy istnieje sposób, aby „z wdziękiem” zamknąć kocura podczas kontrolowania przez przełożonego?

Rozumiem, że skrypt shutdown.sh Tomcata rozmawia z tomcat na porcie zamykania, aby zainicjować płynne zamknięcie. Wydaje się, że przełożony nie ma sposobu na określenie „polecenia” zamykania, używając tylko sygnałów.

Czy ktoś z powodzeniem zastosował przełożonego w tomcat?

Ponadto, ponieważ skrypt startup.sh tomcat inicjuje proces java, kopiowałem wynikowe polecenie java bezpośrednio do opiekuna, ale nie jest to tak przyjemne jak użycie skryptu startup.sh ze względu na całą konfigurację środowiska. Czy istnieje sposób na to, aby przełożony używał skryptu startup.sh, ale nadal śledził wynikowy proces java potomnego?

znak
źródło

Odpowiedzi:

6

Dzięki Mark za link do tego skryptu; oto mój przykład pracy dla 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`

A oto, czego użyłem w /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

Uruchamianie wygląda następująco:

[[email protected]:~]# supervisorctl start tomcat
tomcat: started
[[email protected]:~]# supervisorctl status
tomcat                           RUNNING    pid 9611, uptime 0:00:03
[[email protected]:~]# 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

Próbowałem początkowo dodać te zmienne środowiskowe do /etc/supervisord.conf poprzez environmentdyrektywę, ale wpadłem w kłopoty z JAVA_OPTS, ze wszystkimi spacjami i znakami równości. Zajęło się tym umieszczenie go w skrypcie opakowania.

Mam nadzieję, że pomoże to zaoszczędzić komuś czas!

Aaron R.
źródło
1
Mogę potwierdzić, że działa to z Tomcat 7 w superwizji v3.0 na CentOS 6. Zauważ, że startna końcu polecenia w /etc/supervisord.conf jest niepotrzebnym argumentem, ponieważ skrypt nic z tym nie robi.
Rick Hanlon II
Hah, dzięki za haczyk! Przekazałem to do catalina.sh. Usunąłem to.
Aaron R.
20

W pliku catalina.sh znajduje się polecenie „uruchom”. Działa idealnie dobrze z przełożonym:

[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

Uruchom tomcat jako „catalina.sh run” działa na pierwszym planie, ma prawidłowy pid i przyjmuje sygnały. Działa idealnie dobrze z superwizorem.

Siergiej Kozłow
źródło
1
To powinna być zaakceptowana odpowiedź.
MaratC
Pojawia
0

Wydaje się, że przełożony nie ma sposobu na określenie „polecenia” zamykania, używając tylko sygnałów.

Próbowałeś użyć 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
kwanty
źródło
wygląda na to, że QUIT powoduje, że tomcat wykonuje zrzut wątku do dziennika catalina.out (aka konsola).
Mark
1
To interesująca sugestia: confluence.atlassian.com/plugins/viewsource/… - Zasadniczo zawiń skrypt catalina.sh w skrypcie i zainstaluj funkcję pułapki dla zamykania ...
Mark
@Zaznacz to do uruchomienia na OSX, jak można go dostosować do przełożonego?
Conrad.Dean
1
@ Conrad.Dean przełożony stosuje te same założenia. Ten sam skrypt działa dla przełożonego bez modyfikacji
Mark