一个业务项目隔三差五的总会有人反馈联不通主机,只好写个ping监测一下外网出口ip的连接状态,记下时间,等有人再说连不上是,可以判断一下是哪一方的问题。
命令如下,只要替换其中的ip就可以了。
nohup ping -D -O 202.99.96.68 |perl -M'POSIX qw(strftime setsid)' -nle 'BEGIN{setsid();$SIG{CHLD} = "IGNORE";}if($_=~/^\[(\d+)\.(\d+)\]\s(64 bytes from \d+\.\d+\.\d+\.\d+\:|no answer yet for)\sicmp_seq=(\d+)(.?|\sttl=\d+\stime=([\d\.]+)\sms)$/){$tm=strftime("%Y-%m-%d %H:%M:%S",localtime($1));$dt=substr($tm,0,10);open(FI,">>pinglog.202.99.96.68.$dt.txt");print FI $tm.".$2\t$4\t$6\t$3";close(FI);}'&
可以在每天一个的文件中输出tab符号分割如下内容,可以直接导入excel进行筛选统计
时间戳 包序号 延迟ms 状态
2016-07-23 16:09:58.337631 6511 2.56 64 bytes from 202.99.96.68: ##正常响应
2016-07-23 16:12:22.626366 15 no answer yet for ##丢包
简要说明
nohup ping -D -O 202.99.96.68 | #nohup在终端断开是也能ping,ping -D 输出unix时间戳 -O 输出丢包
perl
-M'POSIX qw(strftime setsid)' #导出函数
-nle '
BEGIN{ #在-n循环读取的loop 之前执行
setsid(); #创建新的session和process group,成为其leader,并脱离控制终端。
$SIG{CHLD} = 'IGNORE'; #忽略终端退出时程序收到的hup信号
}
if($_=~/^\[(\d+)\.(\d+)\]\s(64 bytes from \d+\.\d+\.\d+\.\d+\:|no answer yet for)\sicmp_seq=(\d+)(.?|\sttl=\d+\stime=([\d\.]+)\sms)$/){ # 用正则表达式过滤ping输出内容
$tm=strftime("%Y-%m-%d %H:%M:%S",localtime($1)); ##unix时间戳 转换为字符串时间显示
$dt=substr($tm,0,10); ##截取日期
open(FI,">>pinglog.202.99.96.68.$dt.txt"); ##打开文件
print FI $tm.".$2\t$4\t$6\t$3"; ##写入文件
close(FI); ##关闭文件
}'&
参考 http://charlee.li/create-daemon-with-perl.html
© 2016, 新之助meow. 原创文章转载请注明: 转载自http://www.xinmeow.com