Fehler und Logging
- Urspruenglicher Autor: Ramon Kukla
- Urspruengliches Datum: 04.02.2011
Ein immer gern vernachlaessigter Punkt bei der Erstellung von Scripte oder auch groesseren Programmen ist die Fehlerbehandlung und fehlenden Ausgaben. Ich habe eine Zeit lang Skripte fuer die Uebertragung von Daten geschrieben. Da gab es natuerlich so simple Anforderungen, die Datei abc.xyz von Laufwerk C: nach D: zu kopieren. Aber es gab da auch etwas anspruchsvollere Aufgaben. Hole die PGP-verschluesselte Datei NAME_Datum_von_gestern.txt via scp ab und entschluessele diese. Anschliessend bitte alle Daten in eine Datenbank importieren und die Datei dann via FTP auf einen Server verschieben. Damit es nicht langweilig wurde gab es dann auch regelmaessig Anforderungen eingetroffene und verarbeitete Dateien zu sichern, so dass im Fehlerfall noch einmal darauf zugegriffen werden kann.
Jetzt koennte ein einfacher Job, der taeglich um 01:00 Uhr laueft, wie folgt aussehen:
#!/bin/bash # cp /home/transfer/partner/abc.xyz /home/user/abc.xyz
Vermutlich wird der Job regelmaessig ohne Probleme laufen. Nun ruft aber der Fachbereich an und fragt ob die Datei vor drei Tagen an den Partner uebertragen wurde. Da ist es natuerlich prima, wenn man die Frage ausreichend beantworten kann. Das oben beschriebene Konstrukt glaenzt allerdings nicht mit hohem Informationsgehalt. Besser waere etwas wie beispielsweise:
#!/bin/bash # timestamp=$(date "+%Y%m%d-%H%M") echo $timestamp echo "Starte Script ABC" if cp /home/transfer/partner/abc.xyz /home/user/abc.xyz; then echo "Datei abc.xyz von /home/transfer/partner/ nach /home/user/ kopiert" else echo "Kopiervorgang fehlgeschlagen" fi echo "Beende Script ABC"
Wird das Script nun via kopierjob.bash » kopierjob.log
aufgerufen hat man spaeter immer noch die Moeglichkeit zu pruefen, ob eine Datei kopiert wurde.
Das Script ist natuerlich sehr einfach gehalten. Und auch die Ausgabe in das Log ist so simpel, dass das anschauen aus optischen Gruenden keinen Spass macht. Es soll aber auch nur darstellen wie hilfreich es sein kann, wenn man sich nicht nur auf die eigentliche Aufgabe konzentriert. Wichtig ist auch, dass man im sinnvollen Rahmen Fehler abfragt und Informationen wegschreibt. Die Zeit die man in die Erstellung des etwas umfangreicheren Skriptes steckt, spart man nachher bei der moeglichen Fehlersuche.
Wie ist eure Erfahrung mit dem Thema? Ignoriert ihr Meldungen oder seit ihr bekennende „Logschreiber“?