Ferby: Linux ShellScript Frage

Liebe User,

ich muss ein kleines ShellScript für Ubuntu schreiben und kenne mich leider damit nicht sehr gut aus.

Folgende Anforderung: Wenn in einem bestimmten Ordner die letzte Änderung an irgendeiner Datei länger als 10 Minuten zurück liegt soll ein E-Mail verschickt werden.

Soweit bin ich:

1: #!/bin/bash
2: log_path="/home/abc/Desktop/prog/log_dir"
3: find $log_path -exec stat \{} --printf="%y\n" \; | sort -n -r | head -n 1
4: DATE=`date +%Y.%m.%d-%H:%M:%S`
5: # IF CONDITION ???
6: echo "$DATE: LOG OF PROG DID NOT CHANGE IN THE LAST 10 MINUTES" | mail -s "PANIC E-MAIL" eine@mail.adresse

Zeile 3 liefert das letzte Änderungsdatum
Zeile 4 liefert das aktuelle Datum

Was mir jetzt fehlt ist die IF-Condition. Also ich möchte in Zeile 5 das letzte Änderungsdatum aus Zeile 3 mit dem aktuellen Datum aus Zeile 4 vergleichen. Wenn hier mehr als 10 Minuten unterschied sind, soll Zeile 6 ausgeführt werden.

Ich habe leider keinen Ahnung wie ich hier ran gehen soll, finde auch keine Beispiele in Google. Kann mir wer weiterhelfen, einen Tipp geben?

  1. Hallo Ferby,

    Folgende Anforderung: Wenn in einem bestimmten Ordner die letzte Änderung an irgendeiner Datei länger als 10 Minuten zurück liegt soll ein E-Mail verschickt werden.

    find kann dir direkt die passenden Dateien heraussuchen, siehe man find im Terminal.

    Viele Grüße
    Robert

  2. Wenn in einem bestimmten Ordner die letzte Änderung an irgendeiner Datei länger als 10 Minuten zurück liegt soll ein E-Mail verschickt werden.

    1. Die find-Option -mmin sucht Objekte, die vor mindestens bzw. längstens x Minuten geändert wurden (je nachdem, ob x positiv oder negativ ist).
    2. bash erlaubst es, die Ausgabe von Programmen mittels $() irgendwo reinzustecken (hier: in Anführungszeichen).
    3. if kann zusammen mit [ den Inhalt von Anführungszeichen prüfen.
    #!/bin/bash
    log_path="/home/abc/Desktop/prog/log_dir"
    
    if [ ! "$(find $log_path -mmin -10)" ]; then
       echo "$(date): LOG OF PROG DID NOT CHANGE IN THE LAST 10 MINUTES" | mail -s "PANIC E-MAIL" eine@mail.adresse
    fi
    
    1. Moin,

      1. Die find-Option -mmin sucht Objekte, die vor mindestens bzw. längstens x Minuten geändert wurden (je nachdem, ob x positiv oder negativ ist).

      Wenn sogar nur eine Datei jeweils betroffen ist, dann kann find auch gleich das „if“ übernehmen: Mit dem Parameter -exec wird für jede gefundene Datei der angegebene Befehl ausgeführt.

      Viele Grüße
      Robert

  3. Danke für eure Hilfe, meine finale Lösung:

    #!/bin/bash
    log_path="/home/bla/Desktop/bla/log_dir/"
    
    if [ ! "$(find $log_path -mmin -10)" ]; then
        echo "LOG OF bla DID NOT CHANGE" | mail -s "PANIC E-MAIL bla" "bla@bla.eu"
    fi