Einführung
Stellen Sie sich vor, Sie haben einen Roboter, der Ihr Haus putzt, während Sie schlafen. Weil Sie schlafen, können Sie den Roboter nicht bei der Arbeit beobachten. Wenn Sie aufwachen: Woher wissen Sie, ob er tatsächlich geputzt hat oder ob er unter dem Sofa stecken geblieben ist?
Die Lösung lautet: Sie bitten den Roboter, ein Tagebuch zu führen.
Unter Linux laufen automatisierte Skripte häufig im Hintergrund oder über Scheduler, während niemand das Terminal beobachtet. Die Ausgabe auf dem Bildschirm reicht dann nicht aus. Damit Sie nachvollziehen können, was passiert ist, schreiben Sie die Ausgabe stattdessen in eine Protokolldatei.
Das ist eine der einfachsten und zugleich wertvollsten Gewohnheiten bei der Automatisierung. Ein Skript ohne Protokolle kann unbemerkt fehlschlagen. Ein Skript mit Protokollen hinterlässt Belege.
In diesem Lab werden Sie:
- Die Ausgabe umleiten: Sie bringen einem Skript bei, in eine Datei statt auf den Bildschirm zu schreiben.
- Die Integrität bewahren: Sie verwenden den Append-Operator, um neue Einträge hinzuzufügen, ohne alte zu löschen.
- Zeitstempel hinzufügen: Sie sorgen dafür, dass jeder Tagebucheintrag Datum und Uhrzeit enthält.
Ausgabe an eine Protokolldatei anhängen
Normale Skripte geben ihre Ausgabe sofort auf dem Bildschirm aus. Das ist so, als würden Sie jemandem direkt gegenüberstehen und mit ihm sprechen. Wenn jedoch niemand zuhört – wie bei automatisierten Skripten –, gehen diese Worte für immer verloren.
Wir müssen diese Ausgabe in einer Datei erfassen. Dazu verwenden wir Umleitungsoperatoren.
Das knüpft direkt an eine frühere Idee der Shell an: Befehle schreiben normalerweise in die Standardausgabe, und durch Umleitung wird festgelegt, wohin diese Ausgabe geht. Protokollierung ist lediglich eine praktische Anwendung desselben Mechanismus in der Automatisierung.
>(Überschreiben): „Lösche das Tagebuch und beginne eine neue Seite.“ (Schlecht für den Verlauf)>>(Anhängen): „Gehe zur nächsten leeren Zeile und schreibe dort weiter.“ (Gut für den Verlauf!)
Sehen wir uns das vorbereitete einfache Skript an:
cat myscript.sh
Es gibt lediglich „The script is running“ aus. Wenn Sie es jetzt ausführen (./myscript.sh), wird die Ausgabe auf dem Bildschirm angezeigt.
Ändern wir es so, dass es in ein Tagebuch namens script.log schreibt.
Öffnen Sie das Skript:
nano myscript.sh
Ändern Sie die Zeile so, dass sie den Operator >> verwendet.
Profi-Tipp: Verwenden Sie beim Schreiben von Protokollen immer den absoluten Pfad (die vollständige Adresse), zum Beispiel /home/labex/project/script.log. So geht das Tagebuch nicht in einem beliebigen Ordner verloren, wenn das Skript von einem anderen Ort aus gestartet wird.
Diese Gewohnheit mit absoluten Pfaden ist wichtig, weil geplante Jobs häufig ein anderes Arbeitsverzeichnis verwenden als das, das Sie in einer interaktiven Shell erwarten. Ein Skript, das ohne Pfadangabe in script.log schreibt, kann die Datei am falschen Ort anlegen.
Ihre Datei sollte so aussehen:
#!/bin/bash
echo "The script is running" >> /home/labex/project/script.log
Speichern und beenden Sie den Editor.
Führen Sie das Skript nun aus:
./myscript.sh
Keine Ausgabe.
Das Skript wurde ausgeführt, hat Ihnen aber nichts angezeigt. Stattdessen hat es dem Tagebuch etwas zugeflüstert.
Prüfen Sie das Tagebuch:
cat script.log
Die Meldung sollte nun sicher in der Datei gespeichert sein.
Zeitstempel hinzufügen
Ein Tagebucheintrag, der beschreibt, „was passiert ist“, ist nutzlos, wenn er nicht angibt, „wann es passiert ist“. Wenn Ihr Skript ein Jahr lang täglich ausgeführt wird, enthält die Protokolldatei lediglich 365 identische Zeilen mit dem Text „The script is running“.
Wir müssen einen Zeitstempel hinzufügen. Unter Linux gibt es den Befehl date, der die aktuelle Zeit ausgibt. Diese Ausgabe leiten wir ebenfalls in die Protokolldatei um.
Das ist der Beginn von Observability: Sie hinterlassen genügend Belege, damit ein Mensch später nachvollziehen kann, was passiert ist. Selbst einfache Zeitstempel verbessern Ihre Möglichkeiten zur Fehlersuche bei automatisierten Jobs deutlich.
Öffnen Sie myscript.sh:
nano myscript.sh
Fügen Sie den Befehl date vor der Meldung ein. Dadurch zeigt das Protokoll zuerst die Zeit und anschließend die Aktion.
#!/bin/bash
date >> /home/labex/project/script.log
echo "The script is running" >> /home/labex/project/script.log
Speichern und beenden Sie den Editor.
Führen Sie das Skript erneut aus:
./myscript.sh
Prüfen Sie das Protokoll:
cat script.log
Nun sollten Sie etwas Ähnliches sehen:
The script is running
Fri Oct 27 10:00:00 UTC 2023
The script is running
(Die erste Zeile stammt aus Ihrem vorherigen Test.)
Jetzt wird jede Aktion mit einer genauen Uhrzeit versehen. So können Sie Ihrem Vorgesetzten nachweisen, dass die automatisierte Sicherung tatsächlich um 3 Uhr morgens ausgeführt wurde!
In größeren Systemen helfen Protokolle außerdem bei schwierigeren Fragen: Wurde ein Skript zweimal ausgeführt? Wurde es auf halbem Weg beendet? Wie viel Zeit verging zwischen den Ausführungen? Gute Protokolle machen unsichtbare Automatisierung überprüfbar.
Protokollverlauf überprüfen
Testen wir nun die Theorie zum „Anhängen“. Wenn wir statt >> (Anhängen) > (Überschreiben) verwenden würden, würde unsere Protokolldatei nicht wachsen. Sie würde effektiv nur die letzte Ausführung anzeigen.
Dieser Unterschied ist wichtig, wenn ein Skript wiederholt ausgeführt wird. Überschreiben eignet sich für Momentaufnahmen eines Status. Für historische Aufzeichnungen ist Anhängen jedoch meistens besser, weil dadurch die Reihenfolge der Ereignisse erhalten bleibt.
Simulieren wir einen arbeitsreichen Tag, an dem das Skript mehrfach ausgeführt wird.
Führen Sie es dreimal hintereinander aus:
./myscript.sh
./myscript.sh
./myscript.sh
Lesen Sie nun das Tagebuch:
cat script.log
Sie sollten eine wachsende Liste von Einträgen sehen, jeweils mit einem eigenen Zeitstempel. Dieser Verlauf ist bei der Fehlersuche äußerst wertvoll. Wenn ein Server gestern abgestürzt ist, können Sie im Protokoll zum Zeitstempel von gestern zurückgehen und genau sehen, was das Skript zu diesem Zeitpunkt getan hat.
Zusammenfassung
Sie haben Ihrem Skript erfolgreich beigebracht, ein Tagebuch zu führen.
In diesem Lab haben Sie Folgendes gelernt:
- Umleitung (
>>): Sie leiten die „Sprache“ eines Skripts in eine Datei um, damit sie nicht verloren geht. - Anhängen: Sie fügen neue Einträge zum Verlauf hinzu, statt ihn zu löschen.
- Zeitstempel: Sie fügen
datehinzu, damit Sie wissen, wann etwas passiert ist.
So arbeiten professionelle Dienste unter Linux standardmäßig. Ob Webserver oder Datenbank: Sie alle schreiben genau wie Ihr Skript in Protokolldateien.



