Tomcat mit Supervisor steuern

14

Gibt es eine Möglichkeit, Tomcat bei der Steuerung über Supervisor ordnungsgemäß herunterzufahren?

Meines Wissens nach spricht das Skript shutdown.sh von Tomcat über den Shutdown-Port mit Tomcat, um ein ordnungsgemäßes Herunterfahren einzuleiten. Der Supervisor scheint keine Möglichkeit zu haben, einen Befehl zum Herunterfahren anzugeben, sondern nur Signale zu verwenden.

Hat jemand erfolgreich Supervisor mit Kater verwendet?

Da das Skript startup.sh von tomcat den Java-Prozess initiiert, habe ich den resultierenden Java-Befehl direkt in den Supervisor kopiert. Dies ist jedoch aufgrund des gesamten Setups der Umgebung nicht so hilfreich wie die Verwendung des Skripts startup.sh. Gibt es eine Möglichkeit, Supervisor dazu zu bringen, das Skript startup.sh zu verwenden, den resultierenden untergeordneten Java-Prozess jedoch zu verfolgen?

Kennzeichen
quelle

Antworten:

6

Vielen Dank an Mark für den Link zu diesem Skript. Hier ist mein Arbeitsbeispiel für 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`

Und hier ist, was ich in /etc/supervisord.conf verwendet habe:

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

Laufen sieht so aus:

[[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

Ich habe zunächst versucht, diese Umgebungsvariablen über die environmentDirektive in /etc/supervisord.conf einzufügen, bin aber mit JAVA_OPTS mit allen Leerzeichen und Gleichheitszeichen in Schwierigkeiten geraten. Dafür sorgte das Einfügen in das Wrapper-Skript.

Hoffe, das hilft jemand anderem, etwas Zeit zu sparen!

Aaron R.
quelle
1
Ich kann bestätigen, dass dies mit Tomcat 7 in Supervisord 3.0 unter CentOS 6 funktioniert. Beachten Sie, dass startam Ende des Befehls in /etc/supervisord.conf ein unnötiges Argument steht, da das Skript nichts damit zu tun hat.
Rick Hanlon II
Hah, danke für den Fang! Ich habe das immer an catalina.sh weitergegeben. Ich habe es entfernt.
Aaron R.
20

In catalina.sh gibt es einen "run" -Befehl. Es funktioniert einwandfrei mit dem Supervisor:

[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

Der als "catalina.sh run" ausgeführte Kater arbeitet im Vordergrund, hat die richtige PID und akzeptiert Signale. Funktioniert einwandfrei mit Supervisor.

Sergey Kozlov
quelle
1
Dies sollte eine akzeptierte Antwort sein.
MaratC
Ich erhalte die
Meldung
0

Der Supervisor scheint keine Möglichkeit zu haben, einen Befehl zum Herunterfahren anzugeben, sondern nur Signale zu verwenden.

Haben Sie versucht, zu verwenden 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
Quanten
quelle
Es sieht so aus, als ob QUIT Tomcat dazu veranlasst, einen Thread-Dump im Protokoll catalina.out (auch als Konsole bezeichnet) auszuführen.
Mark
1
Das ist ein interessanter Vorschlag: confluence.atlassian.com/plugins/viewsource/... - Im Wesentlichen catalina.sh in einem Skript wickeln und eine Trap - Funktion zur Abschaltung installieren ...
Mark
@Mark das ist für OSX, wie kann es für Supervisor angepasst werden?
Conrad.Dean
1
@ Conrad.Dean Supervisor verwendet die gleichen Annahmen. Dasselbe Skript funktioniert für Supervisor ohne Änderungen
Mark