Ich habe also ein Bash-Skript, das Protokolle wie dieses erstellt:
traceroute to -------, 30 hops max, 60 byte packets
1 router.Belkin (192.168.2.1) 2.275 ms 2.263 ms 2.249 ms
2 ------- 16.961 ms 21.060 ms 21.069 ms
3 ------- 21.025 ms 21.009 ms 20.996 ms
Ich möchte den ms-Teil herausfiltern und sehen, ob einer davon über 350 ms liegt. Wenn das der Fall ist, wird die gesamte Protokolldatei mit dem Betreff „…“ und dem Text „…“ an meine E-Mail gesendet. Irgendwelche Hilfe?
Danke!
Antwort1
Hier ist ein Skript. Geben Sie den Namen der Protokolldatei als erstes Argument an. Dadurch wird geprüft, ob eine Zeit über 350 ms liegt. Wenn eine solche Zeit gefunden wird, wird eine E-Mail gesendet.
#!/bin/sh
logfile="$1"
flag="$(awk -v RS=" " '$1 == "ms" && last > 350 {flag=1} {last=$1} END{print flag}' "$logfile")"
[ "$flag" ] && mail you@host -s "Over 350ms Report for $logfile" <"$logfile"
Dies erfordert, dass E-Mail auf Ihrem System ordnungsgemäß installiert und konfiguriert ist.
Kombiniertes Skript
Das oben genannte kann mit dem Skript in kombiniert werdenDas Skript durchläuft die Dateien nicht wie geplantwie folgt:
#!/bin/sh
n=
while true
do
fname=~/"Scripts/logs/trace$n.log"
[ -f "$fname" ] || break
n=$(($n+1))
done
traceroute google.com >"$fname"
flag="$(awk -v RS=" " '$1 == "ms" && last > 350 {flag=1} {last=$1} END{print flag}' "$fname")"
[ "$flag" ] && mail you@host -s "Over 350ms Report for $fname" <"$fname"
Genossenschaftsform
Angenommen, das Skript inDas Skript durchläuft die Dateien nicht wie geplantseparat ausgeführt wird. Ein mögliches Skript zum Überprüfen der von ihm erstellten Dateien auf Verzögerungen >350 ms wäre dann:
#!/bin/sh
for logfile in ~/Scripts/logs/trace*.log
do
flag="$(awk -v RS=" " '$1 == "ms" && last > 350 {flag=1} {last=$1} END{print flag}' "$logfile")"
[ "$flag" ] && mail you@host -s "Over 350ms Report for $logfile" <"$logfile"
done
Kooperatives Formular mit Verschieben und Löschen
#!/bin/sh
otherdir=~/"Scripts/logs-with-long-delays/"
for logfile in ~/Scripts/logs/trace*.log
do
flag="$(awk -v RS=" " '$1 == "ms" && last > 350 {flag=1} {last=$1} END{print flag}' "$logfile")"
if [ "$flag" ]
then
mail you@host -s "Over 350ms Report for $logfile" <"$logfile"
mv "$logfile" "$otherdir"
else
rm "$logfile"
fi
done