
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"
wc
Beachten Sie, dass Sie zuerst die Anzahl der Zeilen mit ermitteln müssen , dann ein head
für diese Anzahl von Zeilen ausführen und THAT an tail und dann an grep weiterleiten müssen. Andernfalls könnte die Protokolldatei zwischen grep
und dem wachsen wc
und 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.