CodeGym /Kurse /Docker SELF /Schreiben eines einfachen Bash-Skripts zur Automatisierun...

Schreiben eines einfachen Bash-Skripts zur Automatisierung von Aufgaben mit cron

Docker SELF
Level 3 , Lektion 6
Verfügbar

Schreiben eines einfachen Bash-Skripts zur Automatisierung von Aufgaben mit cron

1. Aufgabenstellung

Heute schreiben wir ein echtes Skript, das die Erreichbarkeit einer Website überprüft und das Ergebnis in eine Logdatei schreibt, und dann automatisieren wir dessen Ausführung mit Hilfe von cron.

Was wollen wir machen?

Wir werden ein Bash-Skript erstellen, das:

  1. Die Erreichbarkeit der angegebenen Website mit ping überprüft.
  2. Das Ergebnis der Überprüfung in eine Logdatei schreibt, einschließlich Zeit und Datum.
  3. Dieses Skript automatisch alle 5 Minuten mit cron ausführt.

Warum ist das wichtig?

In der realen Welt gehört die Überwachung der Erreichbarkeit von Websites und Servern zu den wichtigsten Aufgaben von Systemadministratoren. Zum Beispiel, wenn eure Website (oder euer Server) plötzlich aufhört zu antworten, wollt ihr so früh wie möglich darüber informiert werden. Ein solches Szenario ist nicht nur für die Überwachung nützlich, sondern auch bei Vorstellungsgesprächen oder in der beruflichen Praxis.


2. Schritt 1: Erstellung eines einfachen Bash-Skripts

Fangen wir mit der Erstellung des grundlegenden Bash-Skripts an. Hier ist eine Schritt-für-Schritt-Erklärung, was das Skript tun wird:

  1. Wir legen die Adresse der Website fest, die überprüft werden soll.
  2. Wir nutzen ping, um eine Anfrage an den Server zu senden.
  3. Wir prüfen, ob eine Antwort zurückgegeben wurde.
  4. Wir speichern das Ergebnis in einer Log-Datei.

Lass uns die Datei site_check.sh erstellen:

#!/bin/bash

# Adresse der Website definieren
WEBSITE="example.com"

# Datei zum Loggen der Ergebnisse
LOG_FILE="/var/log/site_status.log"

# Überprüfen der Erreichbarkeit der Website mit ping
if ping -c 1 $WEBSITE &> /dev/null; then
    # Wenn die Website erreichbar ist
    echo "$(date): $WEBSITE ist erreichbar" >> $LOG_FILE
else
    # Wenn die Website nicht erreichbar ist
    echo "$(date): $WEBSITE ist nicht erreichbar" >> $LOG_FILE
fi

Erklärung des Codes:

  1. #!/bin/bash — gibt an, dass dieses Skript mit Bash ausgeführt werden soll.
  2. WEBSITE="example.com" — Adresse der Website, die überprüft werden soll. Du kannst example.com durch jede beliebige Website oder jeden Server ersetzen, den du überwachen möchtest.
  3. ping -c 1 $WEBSITE — sendet ein (-c 1) Paket an die angegebene Website. Wenn die Website antwortet, wird die Ausführung mit Code 0 beendet. Wenn nicht, tritt ein Fehler auf.
  4. &> /dev/null — leitet die Standardausgabe und Fehler in das "schwarze Loch" um (wir wollen die Ausgabe von ping nicht in der Konsole sehen).
  5. $(date) — fügt das aktuelle Datum und die Uhrzeit in die Nachricht ein.
  6. >> $LOG_FILE — hängt das Ergebnis am Ende der Log-Datei an.

3. Schritt 2: Das Skript manuell ausführen

Bevor wir die Ausführung des Skripts automatisieren, lass uns sicherstellen, dass es funktioniert.

  1. Speichere das Skript in der Datei site_check.sh.

  2. Mache es ausführbar:

    chmod +x site_check.sh
    
  3. Führe es aus:

    sudo ./site_check.sh
    

Nach der Ausführung des Skripts öffne die Datei /var/log/site_status.log, um sicherzustellen, dass das Prüfergebnis im Log hinzugefügt wurde. Nutze den Befehl:

cat /var/log/site_status.log

Wenn alles funktioniert, solltest du eine Zeile wie diese sehen:

Mon Oct 30 14:35:22 UTC 2023: example.com ist erreichbar

4. Schritt 3: Automatische Ausführung mit cron einrichten

Wir wissen bereits, dass cron Aufgaben nach einem Zeitplan ausführen kann. Jetzt richten wir cron so ein, dass unser Skript alle 5 Minuten ausgeführt wird.

Crontab bearbeiten

Öffne den crontab-Editor:

crontab -e

Füge die folgende Zeile hinzu:

*/5 * * * * /path/to/site_check.sh

Erklärung:

  • */5 — gibt an, dass die Aufgabe alle 5 Minuten ausgeführt werden soll.
  • /path/to/site_check.sh — der vollständige Pfad zu unserem Skript. Stelle sicher, dass der Pfad korrekt ist. Wenn sich das Skript beispielsweise im Home-Verzeichnis des Benutzers befindet, könnte der Pfad so aussehen: /home/your_username/site_check.sh.

Nach dem Speichern der Änderungen wird cron das Skript alle 5 Minuten ausführen. Um sicherzustellen, dass die Aufgabe hinzugefügt wurde, führe folgendes aus:

crontab -l

5. Schritt 4: Überprüfung der cron-Funktionalität

Jetzt prüfen wir, ob die Automatisierung funktioniert. Warte 5-10 Minuten und öffne erneut die Logdatei:

cat /var/log/site_status.log

Du solltest neue Einträge sehen, die alle 5 Minuten aktualisiert werden. Zum Beispiel:

Mon Oct 30 14:35:22 UTC 2023: example.com ist erreichbar
Mon Oct 30 14:40:22 UTC 2023: example.com ist erreichbar
Mon Oct 30 14:45:22 UTC 2023: example.com ist erreichbar

6. Analyse typischer Fragen und Fehler

  1. Ping gibt den Fehler 'Permission denied' zurück

    Falls du das Skript als normaler Benutzer ausführst, hat er möglicherweise nicht genügend Rechte. Führe das Skript mit sudo aus oder gib Ausführungsrechte hinzu.

  2. Log-Datei wird nicht erstellt

    Stelle sicher, dass der Pfad zur Log-Datei (/var/log/site_status.log) korrekt ist und dein Benutzer Schreibrechte in diesem Verzeichnis hat. Wenn die Datei nicht existiert, erstelle sie manuell mit:

    sudo touch /var/log/site_status.log
    sudo chmod 666 /var/log/site_status.log
    
  3. cron startet das Skript nicht

    Prüfe, ob der cron-Dienst läuft:

    sudo systemctl status cron
    

    Er sollte den Status active (running) haben. Falls er gestoppt ist, starte ihn:

    sudo systemctl start cron
    
  4. Skript wird nicht von cron ausgeführt, funktioniert aber manuell

    Stelle sicher, dass der Pfad zum Skript und zu allen verwendeten Dateien vollständig angegeben ist. In cron-Aufgaben können Umgebungsvariablen (wie $PATH) anders sein. Es ist besser, absolute Pfade zu verwenden.


7. Verbesserungen und zusätzliche Aufgaben

Filtern von Webseiten

Erweitere das Skript, sodass es die Erreichbarkeit mehrerer Webseiten überprüft. Zum Beispiel:

WEBSITES=("example.com" "google.com" "stackoverflow.com")
for SITE in ${WEBSITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$(date): $SITE ist erreichbar" >> $LOG_FILE
    else
        echo "$(date): $SITE ist nicht erreichbar" >> $LOG_FILE
    fi
done

Benachrichtigungen versenden

Füge das Versenden von Benachrichtigungen hinzu, falls eine Webseite nicht erreichbar ist. Zum Beispiel mit dem Befehl mail, um eine E-Mail zu senden:

# E-Mail-Benachrichtigung
if ! ping -c 1 $WEBSITE &> /dev/null; then
    echo "$WEBSITE ist nicht erreichbar!" | mail -s "Website Check Alarm" your_email@example.com
fi

Zyklisches Loggen

Begrenze die Größe der Log-Datei auf beispielsweise 1 MB. Wenn die Datei zu groß wird, benenne sie um (wie ein Archiv) und starte ein neues Log.


Glückwunsch! Jetzt weißt du, wie du Bash-Skripte und cron nutzen kannst, um echte Aufgaben zu automatisieren. Diese Fähigkeiten sind besonders gefragt bei DevOps-Ingenieuren und Systemadministratoren.

1
Опрос
Linux-Dienste,  3 уровень,  6 лекция
недоступен
Linux-Dienste
Linux-Dienste
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION