所以我有一個 bash 腳本來建立如下日誌:
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
我想過濾掉 ms 部分,看看是否有超過 350ms 的部分。如果有的話,整個日誌檔案將發送到我的電子郵件,主題為“...”,正文為“...”有什麼幫助嗎?
謝謝你!
答案1
這是一個腳本。提供日誌檔案名稱作為第一個參數。這會檢查任何超過 350 毫秒的時間。如果找到這樣的時間,它會發送電子郵件。
#!/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"
這確實需要您的系統正確安裝和設定郵件。
組合腳本
上面的內容可以與腳本結合起來腳本不會像計劃的那樣循環遍歷文件如下:
#!/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"
合作形式
假設腳本在腳本不會像計劃的那樣循環遍歷文件正在單獨運行。然後,檢查由它創建的檔案是否有 >350 毫秒延遲的可能腳本是:
#!/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
具有移動和刪除功能的協作表單
#!/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