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