linux 在文件记录 ping 每个包输出的时间 包括丢包

一个业务项目隔三差五的总会有人反馈联不通主机,只好写个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

0.00 avg. rating (0% score) - 0 votes
点赞