Zobelei-Homepage

Zähler

Das Zobel'sche Netz

Familie Theologie Computer Freizeiten Wetter Info

Temperatur in Dohna: Stand: 05.Dec 14
Außen:  Ausgefallen °C -  Eiskalt  ( Uhr)
Innen:  Ausgefallen °C -  Eiskalt  ( Uhr)
ServerCPU:  29.38 °C -  Sehr warm  (17:53:46 Uhr)
 

 

Bitte wählen:

Überblick

Windows

Gemeindeverzeichnis1,2

SyncFlo1

Linux

Existenztester

POP3-Aufräumen

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!