所以我有一个 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
我想过滤掉毫秒部分,看看是否有超过 350 毫秒的部分。如果有,整个日志文件将发送到我的电子邮件中,主题为“...”,正文为“...”,有什么帮助吗?
谢谢!
答案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