Jetzt soll der Tomcat noch, genauso wie Apache, automatisch gestartet und überwacht werden.
Dazu dient das Tool daemon_mgr, das automatisch Anwendungen starten und stoppen kann. Ebenso überwacht es die entsprechenden Prozesse und schickt bei Problemen eine Mail. (Siehe "Benachrichtigungen" in der Admin-GUI). Der daemon_mgr ist automatisch installiert.
Allgemeines
Der Tomcat wird über Shellskripte im Verzeichnis
gesteuert, wobei CATALINA_HOME eine in der /etc/profile gesetzte Systemvariable ist, die auf das Installations (Home-) Verzeichnis von Tomcat zeigt (z.B. /opt/tomcat).
Ich habe bei mir Tomcat im "Original"-Verzeichnis (apache-tomcat-6.0.20) unter /opt installiert und dann einen Sym-Link auf dieses Verzeichnis gesetzt, damit ich unabhängig von der Versionsnummer bin.
ln -s /opt/apache-tomcat-6.0.20 /opt/tomcat
Von der Shell aus wird Tomcat über:
/opt/tomcat/bin/startup.sh
gestartet und über
/opt/tomcat/bin/shutdown.sh
gestoppt. Das klappt alles wunderbar, solange die Shell, die den Tomcat startet, geöffnet bleibt...
Die beiden Skripte machen eigentlich nicht anderes als
/opt/tomcat/bin/catalina.sh
mit den entsprechenden Parametern start bzw. stop aufzurufen.
Anpassen der catalina.sh
Da Tomcat ja automatisch hochfahren soll und ich den Tomcat trotzdem starten und stoppen können möchte, habe ich in der catalina.sh folgende Zeilen hinzugefügt:
elif [ "$1" = "daemon_start" ] ; then shift touch "$CATALINA_BASE"/logs/catalina.out /sbin/daemon_mgr java start " "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ org.apache.catalina.startup.Bootstrap "$@" start \ >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &" if [ ! -z "$CATALINA_PID" ]; then echo $! > $CATALINA_PID fielif [ "$1" = "daemon_stop" ] ; then shift /sbin/daemon_mgr java stop " "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ org.apache.catalina.startup.Bootstrap "$@" stop \ >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &" if [ ! -z "$CATALINA_PID" ]; then /bin/kill -INT `cat $CATALINA_PID` 1>/dev/null 2>/dev/null fi RETVAL=$?
Dieser Codeabschnitt wird in der Datei catalina.sh am besten vor der Zeile
elif [ "$1" = "stop" ] ; then
eingefügt.
Nach dem Speichern stehen für catalina.sh nun die zusätzlichen Parameter:
daemon_start
und
daemon_stop
zur Verfügung.
Der Befehl
/opt/tomcat/bin/catalina.sh daemon_start
startet den Tomcat im Hintergrund und fügt ihn mit dem Prozessnamen "java" der Prozessüberwachung daemon_mgr hinzu. Ich habe bisher leider noch keinen Weg gefunden hier einen anderen Namen zu konfigurieren ohne Probleme mit der Überwachung zu bekommen. In der Datei /etc/daemon_mgr.conf ist jetzt am Ende der Datei ein neuer, langer Eintrag für den Tomcat zu sehen. Beim Ausfall des Tomcat wird dieser jetzt automatisch neu gestartet und eine Mail an den Admin geschickt (so das konfiguriert ist).
Der Befehl
/opt/tomcat/bin/catalina.sh daemon_stop
beendet den Tomcat und der Status in der /etc/daemon_mgr.conf wird auf "stop" gesetzt.
Damit der Tomcat jetzt nach einem Reboot automatisch startet (auch, wenn er vorher gestoppt war), kann noch ein neues init-Skript mit folgendem Inhalt erstellt werden:
#!/bin/sh# For Administration# default port: 8081test -f /opt/java/bin/java || exit 0test -f /opt/tomcat/bin/catalina.sh || exit 0test -f /opt/java/.1.6.0_10-ea-b39 || exit 0case "$1" in start) echo -n "Starting tomcat services: " # Reset eval period cp /opt/java/.1.6.0_10-ea-b39 /opt/java/lib/arm/.1.6.0_10-ea-b39 /opt/tomcat/bin/catalina.sh daemon_start echo -n " tomcat" echo "." ;; stop) echo -n "Shutting down tomcat services:" /opt/tomcat/bin/catalina.sh daemon_stop echo -n " tomcat" echo "." ;; restart) $0 stop /bin/sleep 10 $0 start ;; *) echo "Usage: /etc/init.d/tomcat {start|stop|restart}" exit 1esacexit 0
Diese Skript kann z.B. im Verzeichnis
unter dem Namen tomcat.sh gespeichert und ausführbar gemacht werden. Es prüft, ob die notwendigen Dateien für Tomcat vorhanden sind, kopiert die Lizenzdatei /opt/java/.1.6.0_10-ea-b39 nochmal neu in das /opt/java/lib/arm-Verzeichnis und startet dann den Tomcat über den daemon_mgr.
Damit das Skript jetzt auch beim Hochfahren ausgeführt wird noch einen Symlink setzten:
ln -s /opt/etc/init.d/tomcat.sh /etc/rcS.d/S81tomcat
Die Dateien in rcS.d sind Symlinks auf die verschiedenen init-Skripte der Anwendungen und werden beim Booten in der Reihenfolge S01, S02, ... aus der Datei /etc/inittab mit dem Parameter "start" ausgeführt. S-Skripte sind Start-Skripte, K-Skripte sind Shutdown (Kill-) Skripte.
Ich habe bei mir S81tomcat gewählt, da damit sichergestellt ist, dass Tomcat NACH MySQL gestartet wird, damit ggf. Datenbanverbindungen von den Tomcat-Anwendungen verwendet werden können.
Viel Spaß,
Jan