Fehlerbehandlung und Protokollierung in Skripten
Implementieren Sie eine robuste Fehlerbehandlung, leiten Sie die Skriptausgabe um und erzeugen Sie aussagekräftige Protokolle, um die Skriptausführung zu überwachen und Probleme zu beheben.
Fehlerbehandlung und Protokollierung in Skripten ist eine kostenlose Linux Server Deployment & SSH Mastery-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Linux Server Deployment & SSH Mastery-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Linux Server Deployment & SSH Mastery-Kurs umfasst insgesamt 4 Lektionen.
Machen Sie Ihre Skripte zuverlässig
Stellen Sie sich vor, Ihr Skript läuft auf einem Server und erledigt wichtige Aufgaben. Was passiert, wenn etwas schiefgeht?
- Schlägt es stillschweigend fehl?
- Hinterlässt es ein Chaos?
- Können Sie erkennen, wann und warum es fehlgeschlagen ist?
Robuste Skripte behandeln Fehler angemessen und schreiben klare Protokolle. In dieser Lektion lernen Sie, wie das geht!
Exit-Codes verstehen
Jeder Befehl und jedes Skript unter Linux gibt beim Beenden einen Exit-Code (oder Exit-Status) zurück. Diese Zahl zeigt an, ob der Vorgang erfolgreich war oder fehlgeschlagen ist.
0: Bedeutet Erfolg! Alles ist gut gelaufen.1-255: Bedeutet einen Fehler. Eine bestimmte Zahl kann auf die Art des Fehlers hinweisen.
Sehen wir uns das in der Praxis an:
#!/bin/bash
# This script demonstrates exit codes
echo "Attempting a successful command..."
ls /tmp
echo "Exit code for 'ls /tmp': $?"
echo
echo "Attempting a failing command..."
ls /nonexistent_directory
echo "Exit code for 'ls /nonexistent_directory': $?"Befehlsstatus prüfen
Nachdem ein beliebiger Befehl ausgeführt wurde, können Sie seinen Exit-Code über die spezielle Variable $? prüfen. Das ist äußerst nützlich, um in Ihrem Skript Entscheidungen zu treffen.
Mit einer if-Anweisung können Sie auf Erfolg oder Fehler reagieren:
#!/bin/bash
# Check if a file exists before trying to read it
FILENAME="test_file.txt"
touch $FILENAME # Create it for success case
if [ -f "$FILENAME" ]; then
echo "File '$FILENAME' exists. Processing..."
# ... do something with the file ...
rm $FILENAME # Clean up
else
echo "Error: File '$FILENAME' not found!"
exit 1
fi
echo "Script finished."`set -e`: Bei Fehler beenden
Bei einfachen Skripten kann es mühsam sein, überall manuell $? zu prüfen. Der Befehl set -e ändert das Verhalten Ihres Skripts:
- Wenn ein Befehl mit einem Status ungleich null endet (also fehlschlägt), wird das Skript sofort beendet.
- Dadurch wird verhindert, dass Ihr Skript mit möglicherweise beschädigten Daten oder einem ungültigen Zustand fortfährt.
Führen Sie dieses Skript aus. Was passiert, wenn der Befehl cp fehlschlägt?
#!/bin/bash
set -e
echo "Starting important operations..."
mkdir my_temp_dir
cp /nonexistent_source my_temp_dir/target # This will fail
echo "This line will not be reached if cp fails."
rmdir my_temp_dir
echo "Script finished successfully."`trap` für Aufräumarbeiten
Manchmal müssen Sie selbst dann Aufräumarbeiten durchführen, wenn ein Skript fehlschlägt, etwa temporäre Dateien löschen. Mit dem Befehl trap können Sie Signale (wie das Beenden oder einen Fehler) abfangen und einen Befehl ausführen.
EXIT: Wird beim Beenden des Skripts ausgeführt, unabhängig davon, ob es erfolgreich war oder fehlgeschlagen ist.ERR: Wird ausgeführt, wenn ein Befehl mit einem Status ungleich null endet (sofernset -eaktiv ist).
Hier stellen wir sicher, dass ein temporäres Verzeichnis immer gelöscht wird:
#!/bin/bash
TEMP_DIR="/tmp/my_script_temp_$(date +%s)"
function cleanup {
echo "Cleaning up temporary directory: $TEMP_DIR"
rm -rf "$TEMP_DIR"
}
trap cleanup EXIT
mkdir "$TEMP_DIR"
echo "Working in $TEMP_DIR..."
# Simulate some work, maybe it fails
# cp /nonexistent_file "$TEMP_DIR/" # Uncomment to test failure
echo "Script completed."Ausgabe umleiten
Wenn Ihr Skript ausgeführt wird, gibt es häufig Meldungen aus. Diese gehören hauptsächlich zu zwei Typen:
- Standardausgabe (stdout): Normale Meldungen (Dateideskriptor 1).
- Standardfehlerausgabe (stderr): Fehlermeldungen (Dateideskriptor 2).
Sie können diese Datenströme statt auf den Bildschirm in Dateien umleiten:
command > file: Leitet stdout infileum.command 2> file: Leitet stderr infileum.
Speichern wir Erfolgs- und Fehlermeldungen getrennt.
#!/bin/bash
# Redirect stdout to success.log and stderr to error.log
echo "This is a success message." > success.log
ls /nonexistent_path 2> error.log
echo "Check success.log and error.log files."
# To view them after running:
# cat success.log
# cat error.logGesamte Ausgabe in eine Datei
Oft ist es hilfreich, sowohl die Standardausgabe als auch die Standardfehlerausgabe in einer einzigen Protokolldatei zu speichern, damit sie leichter überprüft werden können. Dafür gibt es mehrere Möglichkeiten:
command > file 2>&1: Leitet stdout infileum und anschließend stderr dorthin, wohin stdout geleitet wird (also in die Datei).command &> file: Eine kürzere, modernere Syntax für dasselbe.
Das eignet sich hervorragend, um ein vollständiges Protokoll der Skriptausführung zu erstellen.
#!/bin/bash
# Redirect both stdout and stderr to a single log file
LOG_FILE="combined_script.log"
echo "Starting script..." &> "$LOG_FILE"
echo "This message goes to stdout." &>> "$LOG_FILE"
ls /nonexistent_dir 2>&1 | tee -a "$LOG_FILE"
echo "Script finished." &>> "$LOG_FILE"
echo "Check the '$LOG_FILE' file for all output."Zeitstempel zu Protokollen hinzufügen
Beim Debuggen ist es entscheidend zu wissen, wann ein Ereignis aufgetreten ist. Zeitstempel in Ihren Protokollmeldungen machen diese wesentlich nützlicher.
Sie können jedem Protokolleintrag mit dem Befehl date das aktuelle Datum und die aktuelle Uhrzeit voranstellen. So lassen sich Ereignisse chronologisch nachvollziehen.
#!/bin/bash
LOG_FILE="timestamped_script.log"
function log_message {
echo "$(date +%Y-%m-%d_%H:%M:%S) - $1" &>> "$LOG_FILE"
}
log_message "Script started."
sleep 1
log_message "Performing task A..."
# Simulate an error
ls /no_such_place || log_message "Error: Command failed."
sleep 1
log_message "Script finished."
echo "Check '$LOG_FILE' for timestamped entries."Mit `logger` in Systemprotokolle schreiben
Bei wichtigen Ereignissen möchten Sie Meldungen möglicherweise direkt an die Protokollierungsfunktion des Systems (Syslog) senden. Genau das erledigt der Befehl logger.
- Systemprotokolle werden häufig von Tools wie
journalctl(auf systemd-Systemen) verwaltet. - Dadurch werden die wichtigen Meldungen Ihres Skripts gemeinsam mit anderen Systemereignissen zentral erfasst.
- Das ist für kritische Fehler oder Prüfprotokolle nützlich.
Mit logger gesendete Meldungen finden Sie mit journalctl -f oder tail -f /var/log/syslog (je nach System).
#!/bin/bash
# Send a message to system logs
SCRIPT_NAME="MyBackupScript"
logger -t "$SCRIPT_NAME" "Starting daily backup operation."
# Simulate a task
sleep 2
if [ $(($RANDOM % 2)) -eq 0 ]; then
logger -t "$SCRIPT_NAME" -p user.info "Backup successful."
else
logger -t "$SCRIPT_NAME" -p user.err "Backup failed: Disk full."
fi
echo "Messages sent to system logs. Check with 'journalctl -t $SCRIPT_NAME'."Überprüfung der Fehlerbehandlung
Sie haben ein Bash-Skript geschrieben, das einige Dateien verarbeitet. Das Skript soll sofort beendet werden, wenn ein darin enthaltener Befehl fehlschlägt. Außerdem soll ein temporäres Verzeichnis unabhängig davon, wie das Skript beendet wird, bereinigt werden.
Welche zwei Bash-Befehle würden Sie hauptsächlich verwenden, um dies zu erreichen?
Zusammenfassung und nächste Schritte
Sie haben gelernt, wie Sie Ihre Bash-Skripte robuster und leichter zu debuggen machen!
- Exit-Codes: Erfolg oder Fehler eines Befehls verstehen.
set -e: Bei Fehlern automatisch beenden.trap: Beim Beenden des Skripts Aufräumarbeiten durchführen.- Ausgabeumleitung: Steuern, wohin stdout und stderr geleitet werden.
- Zeitstempel: Ihren Protokollen Kontext hinzufügen.
logger: Systemweite Protokollierung integrieren.
Durch den Einsatz dieser Techniken werden Ihre automatisierten Aufgaben zuverlässiger und leichter zu verwalten. Üben Sie weiter, um wirklich robuste Automatisierungen zu entwickeln!
Häufig gestellte Fragen
Ist die Lektion „Fehlerbehandlung und Protokollierung in Skripten“ kostenlos?
Ja — der vollständige Text von „Fehlerbehandlung und Protokollierung in Skripten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Linux Server Deployment & SSH Mastery-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Linux Server Deployment & SSH Mastery-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Fehlerbehandlung und Protokollierung in Skripten“?
Implementieren Sie eine robuste Fehlerbehandlung, leiten Sie die Skriptausgabe um und erzeugen Sie aussagekräftige Protokolle, um die Skriptausführung zu überwachen und Probleme zu beheben. Du übst Linux Server Deployment & SSH Mastery mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Linux Server Deployment & SSH Mastery zu starten?
Keine Vorkenntnisse erforderlich. Linux Server Deployment & SSH Mastery auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Fehlerbehandlung und Protokollierung in Skripten“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Linux Server Deployment & SSH Mastery-Lektion Code schreiben und ausführen?
Ja. Jede Linux Server Deployment & SSH Mastery-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Einführung in Bash-Scripting
- Serveraufgaben automatisieren
- Fehlerbehandlung und Protokollierung in Skripten
- Funktionen, Argumente und wiederverwendbare Skripte