Shell-Skript zum Überwachen aktueller Fehler in der Protokolldatei

Shell-Skript zum Überwachen aktueller Fehler in der Protokolldatei

Dieses Skript überwacht die Protokolldatei auf das Muster „ora“, ruft Fehlerdetails ab und sendet eine E-Mail. In diesem Fall möchte ich nur den letzten Fehler abrufen, der in der Protokolldatei aufgetreten ist. Ich habe crontab alle 5 Minuten eingestellt, sodass grep dieselben alten Fehler abruft, die falsche Warnungen verursachen. Das Skript sollte Fehler mit der aktuellen Zeit abrufen und die Suche nach dem alten Fehler vermeiden.

mailto=xyz.email.com
logdirectory=/location/to/logfile
cd $logdirectory
grep "ORA" logfile
if [ $? = 0 ]; then
mailx -s "errors" $mailto
fi

Mein Logfile:

Fri Jun 07 05:09:32 2019 Archived Log entry 93 added for thread 1 sequence 59 ID 0xf10d426f dest 1: 
Fri Jun 07 11:08:20 2019 07-JUN-19 ORA-1100: Testing, Please Ignore

Antwort1

Anzeige von Option 2 vonmein Kommentaralsangefordert von OP:

awk -v parseLog='/some/where/filename' '
    BEGIN {
        prevNR=( (getline line < parseLog) > 0 ? line : 0 )
    }
    (NR>prevNR) && /ORA/{ print; found=1 }
    END {
        print NR > parseLog
        exit !found
    }
' /location/to/logfile

oder in der Shell:

parseLog='/some/where/filename'
IFS= read -r line < "$parseLog"
if [[ -n "$line" ]]; then
    prevNR="$line"
else
    prevNR=0
fi
nr=$(wc -l < /tmp/logfile)
head -"$nr" /location/to/logfile |
    tail +"$(( "$prevNR" + 1 ))" |
    grep ORS
rslt=$?
printf '%d\n' "$nr" > "$parseLog"

wcBeachten Sie, dass Sie zuerst die Anzahl der Zeilen mit ermitteln müssen , dann ein headfür diese Anzahl von Zeilen ausführen und THAT an tail und dann an grep weiterleiten müssen. Andernfalls könnte die Protokolldatei zwischen grepund dem wachsen wcund Sie würden bei Ihrer nächsten Iteration eine Zeile übersehen oder, wenn Sie die Reihenfolge dieser vertauschen, könnten Sie dieselbe Zeile zweimal analysieren.

Beachten Sie, dass oben davon ausgegangen wird, dass alles, was in die Protokolldatei geschrieben wird, in einer atomaren Operation pro Zeile geschieht. Wenn Teile von Zeilen separat geschrieben werden und dann nach Abschluss eine neue Zeile angehängt wird, müssen Sie die letzte, möglicherweise unvollständige Zeile der Protokolldatei für die obige Analyse ignorieren.

verwandte Informationen