Fehler behandeln: Automatisierte Bash-Skripte

Laufen Skripte automatisch ab, will ich wissen von Fehlern, die auftraten. Ich habe keine Lust, die Logdateien zu durchsuchen, sondern lasse ich mir im Falle eines Fehlers eine E-Mail schicken.

Im Artikel MySQL-Datenbanken sichern schrieb ich, wie ich automatisch meine Datenbanken im Web sichern lasse. Die auf dem Webserver gespeicherten Backup-Dateien werden täglich automatisch lokal gespiegelt. Dazu schrieb ich ein Skript, das mit Hilfe des Perl-Skripts mirror Verzeichnisse anderer Rechner lokal spiegelt und das von mehreren Skripten aufgerufen wird:

#!/bin/sh
#
# Author  : Elmar Baumann
# Date    : 2008/12/21
# Requires: Paket mirror (Perl-Skript)
# Doc     : Spiegelt lokal eine Verzeichnishierarchie eines anderen Rechners
#
#           Aufruf: mirror.sh <Konfiguratiosdatei für mirror>
#
################################################################################

# Konfigurationsdatei für mirror
CONF=$1

# Logdatei, in der die Ausgaben von mirror stehen und die an Fehler-E-Mails
# angehängt werden
ERROR_LOGFILE="/tmp/log/$(basename $0)-errors-$$.txt"

# Absender der E-Mail bei Fehlern
ERROR_MAIL_FROM="$(basename $0)"

# Betreff der E-Mail bei Fehlern
ERROR_MAIL_SUBJECT='Fehler beim Spiegeln'

# Empfänger der E-Mail bei Fehlern
ERROR_MAIL_TO='elmar'

# Inhalt der E-Mail bei Fehlern
ERROR_MAIL_MSG='Fehler beim Spiegeln, siehe angehaengte Logdatei.'

################################################################################

function error_mail() {
    echo "${ERROR_MAIL_MSG}" | /usr/bin/mail \
        -a "${ERROR_LOGFILE}" \
        -r "${ERROR_MAIL_FROM}" \
        -s "${ERROR_MAIL_SUBJECT}" \
        "${ERROR_MAIL_TO}"
}

################################################################################

/usr/bin/mirror "${CONF}" >& "${ERROR_LOGFILE}" || error_mail

rm -f "${ERROR_LOGFILE}"

Meine MySQL-Datenbanken im Web kann ich mit folgendem Befehl lokal sichern:

$HOME/bin/mirror.sh $HOME/conf/mirror_website_dbs.conf

Da ich etliche Mirror-Skripte habe, gehe ich anders vor: Im Konfigurationsverzeichnis heißen alle Konfigurationsdateien für mirror mirror_*.conf. Will ich weitere Dateien spiegeln, reicht es, eine neue Datei dieses Namensmusters im Konfigurationsverzeichnis anzulegen. Code des Skripts:

#!/bin/sh

for config_file in /home/elmar/conf/mirror_*\.conf
do
    /home/elmar/bin/mirror.sh $config_file
done

Die Pfade sind ausgeschrieben: Mein Skriptverzeichnis ist nicht in crons Pfad und das Verzeichnis $HOME ist für cron ein anderes als meines.

Ich teste automatisierte Skripte, ob sie mir Fehler-E-Mails schicken: Ich provoziere Fehler, in diesem Beispiel durch falsche Angaben in der Konfigurationsdatei für das Perl-Skript mirror.

Stichwörter:

Zu diesem Artikel können keine Kommentare mehr geschrieben werden.