Nützliche Skripte

Emergency-Skript

...
 -DRECOVERY_SCRIPT=/opt/factfinder/e.sh\
 -XX:OnOutOfMemoryError=/opt/factfinder/e.sh\
...

Wenn Sie die optionalen Java Einstellungen beim Einrichten der Software betrachtet haben, ist Ihnen vermutlich aufgefallen, dass einige Parameter auf ein Skript mit dem Namen e.sh verweisen. Dieses Skript hat die Aufgabe, vor dem Beenden des Tomcat-Prozesses, Daten für eine spätere Analyse zu sammeln. Dieses Skript, zusammen mit einigen anderen aus dem Betrieb, finden Sie in unserem GitHub-Account, alternativ können Sie natürlich auch ein eigenes Skript an diesen Stellen verwenden.

e.sh

Damit die e.sh funktioniert sind einige Anpassungen notwendig, so ist beispielsweise zusätzlich die Umgebungsvariable productiveTomcat notwendig um den Tomcat-Prozess zu identifizieren, der beendet werden muss. Dieser ist schon in den optionalen Java Einstellungen enthalten.

Zur Datensammlung des Skript zählt die Erstellung eines Heap- und Threaddumps, wofür jmap verwendet wird. aus diesem Grund ist es notwendig ein JDK installiert zu haben. Unter debian ist daher zusätzlich das Paket openjdk-8-jdk zu installieren.

sudo apt-get install openjdk-8-jdk

In unserem Beispiel haben wir Tomcat als Dienst installiert, daher versucht der Benutzer tomcat8 das Skript auszuführen, es muss also sichergestellt sein, dass er entsprechende Rechte besitzt.

Automatischer Neustart von Tomcat

Die e.sh beendet den Tomcat-Prozess im Fehlerfall, startet ihr jedoch nicht neu. Da der Tomcat-Prozess essentiell für den Betrieb von FACT-Finder ist, wird über eine Skriptkombination sichergestellt, dass dieser immer läuft. Die Skripte die dafür verantwortlich sind heißen checkserver.sh und cron_checkserver.sh.

checkserver.sh

#!/bin/bash
VERBOSE=0
while /bin/true ; do
  if [ ! "$(ps aux|grep java|grep -o productiveTomcat)" == "productiveTomcat" ]; then
    sudo service tomcat8 restart
  fi
  sleep 5
done

Dieses Skript prüft in einer Endlosschleife ob ein productiveTomcat-Prozess lauft, daher ist auch für dieses Skript das Setzen des Parameters wichtig (siehe optionale Java Einstellungen). Falls der Prozess nicht vorhanden ist, wird dafür gesorgt, dass dieser gestartet wird. Nach eine 5 sekündigen Wartezeit wird die Abfrage wiederholt, dass hat den Hintergrund, dass cron-Aufträge nur jede Minute ausgeführt werden können, wir bei diesem essentiellen Dienst aber keine Minute warten wollen.

cron_checkserver_check.sh

#!/bin/bash
if test `ps -eaf | grep checkserver.sh | grep -v "grep" -c` = 0 ; then
  bash ~/checkserver.sh >> ~/checkserver.log 2>&1 &
  echo `date` checkserver.sh neu gestartet.
fi

Das Skript cron_checkserver_check.sh ist die Absicherung, dass das checkserver.sh Skript seine Prüfung macht. Sollte die Endlosschleife aus irgendwelchen Gründen unterbrochen worden sein, so würde dieses Skript checkserver.sh erneut starten. Dieses Skript wird minütlich als cronjob ausgeführt, so dass zusätzlich noch folgender Eintrag im cronfile vorgenommen werden muss.

* * * * * ~/cron_checkserver_check.sh
Auf dieser Seite