Bitte wählen:
Überblick
Windows
Linux
1 unvollendet
2 z.Zt. auf Eis
|
|
Existenztester
Nachdem mir meine USV-Software gelegentlich abgestürzt ist, habe ich mir ein Skript zur Überwachung gestrickt. Es wird jede Minute aufgerufen und testet, ob der eigentliche Dämon noch läuft. Dafür schaut es sich die Prozeßliste an und checkt sie auf die Existenz des Programmes. Ist das Programm abgestürzt, so wird es erneut gestartet. Anschließend wird erneut geprüft, ob es läuft. Wenn das Programm abgestürzt ist, dann wird eine E-Mail an eine vorgegebene Adresse gesendet. Hier wird mitgeteilt, ob das Programm erfolgreich neugestartet wurde.
Installation
Vorgaben |
Das Skript muß ausführbar sein, und der Benutzer muß /bin/ps x ausführen dürfen. |
Größe |
Das Skript umfaßt 1.588 Bytes. |
Sprache |
#!/bin/sh, eine einfache BourneShell reicht aus. |
Installation |
Anpassungen im Quelltext, z.B. den Prozeßnamen (bei /sbin/usbd ist es usbd) und die Speicherstellen ergänzen. Dann durch Cron anstarten, z.B. jede Minute. |
Umgebung |
Das Programm läuft bei mir auf einem Pentium 233 mit 128 MB RAM seit Monaten problemlos. |
tester : Prüfen, ob ein Programm noch in der Programmliste existiert
Diese Variante ist insofern einfach, da sie nur die Programmliste /bin/ps nach dem Eintrag des Programmes durchsucht. |
#!/bin/sh
# Aufruf jede Minute.
# Test, ob Systemkomponenten funktionieren
SPOOL="/var/spool/tester/" # Arbeitsverzeichnis
TMP=${SPOOL}Antwort # Arbeitsdatei
LOCK=${SPOOL}tester.lock # Lock-Datei
# Test, ob das Skript schon läuft.
if [ -a ${LOCK} ] ; then
OK=0
. ${LOCK}
[ -a /proc/${PIDVERZ}/cmdline ] && OK=1
if [ $OK -eq 1 ] ; then
exit 1
fi
echo "Toten Programmrest gefunden... Laufe weiter" >>${TMP}
rm -f ${LOCK}
fi
touch ${LOCK}
echo "PIDVERZ=$$" >>${LOCK}
# Test Bulldog
# in folgender Zeile Programmbezeichnung "upsd" ersetzten
exist=`/bin/ps x | grep upsd | awk '$5 ~ /\x2fupsd/ { print $1 }'`
if [ -z "$exist" ]
then
echo "`date +"%d.%m.%y %H:%M"` Programmausfall: Bulldog upsd" >>${TMP}
# Neustartfunktion
/usr/local/bulldog/S99bulldog >>${TMP}
sleep 10
unset exist
# in folgender Zeile Programmbezeichnung "upsd" ersetzten
exist=`/bin/ps x | grep upsd | awk '$5 ~ /\x2fupsd/ { print $1 }'`
if [ -z "$exist" ]
then
echo "**********************" >>${TMP}
echo "Neustart mißlungen" >>${TMP}
echo "**********************" >>${TMP}
fi
fi
# Mail bei Fehler
mailer="/usr/sbin/sendmail -t"
if [ -a ${TMP} ] ; then
(
# Mail senden, From und To ersetzen
echo "\
Subject: Programmabsturz
From: server@server (Serverüberwachung)
To: me@server
MIME-Version: 1.0
Content-type: text/plain
"
cat ${TMP}
) | $mailer
rm -f ${TMP}
fi
rm -f ${LOCK}
|
Bei allen hier vorgestellten Programmen gilt der Haftungsausschluß, benutze es auf eigene Gefahr!
|