0Pricing
Linux Server Deployment & SSH Mastery · Lektion

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 (sofern set -e aktiv 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 in file um.
  • command 2> file: Leitet stderr in file um.

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.log

Gesamte 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 in file um 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

  1. Einführung in Bash-Scripting
  2. Serveraufgaben automatisieren
  3. Fehlerbehandlung und Protokollierung in Skripten
  4. Funktionen, Argumente und wiederverwendbare Skripte
← Zurück zu Linux Server Deployment & SSH Mastery