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: Bash