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