环境linux
近日由于无法判断一个网络问题故此要长ping一个地址,但有一个问题出现,当出现网络异常的时候即使ping的时候发现了超时却无法记录具体是什么时间点发生的异常,也就是说无法记录ping的时间点。
根据这个问题我详细查询了ping命令的参数,可以出没有任何参数可以使ping命令在执行的时候带有时间记录,但查询了各类资料和函数后发现可以用组合命令来实现为的需求。
引用此博客内容ping命令添加时间戳_ping 时间戳-CSDN博客
可以对ping命令和其他函数进行组合从而实现带时间的ping。
呈现如下结果:
ping 192.168.0.1 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) }'
PING 192.168.0.1 (10.37.190.10) 56(84) bytes of data. 16:24:25
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.693 ms 16:24:25
把信息输入到文本
ping 192.168.0.1 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) }' > ping.log
把任务放到后台运行
ping 192.168.0.1 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) }' > ping.log &
然后处于学习的目的查询了strftime函数的用法,发现这个函数还有好多参数可用。
转换控制符见下表
转换控制符 | 说明 |
%a | 星期几的简写形式 |
%A | 星期几的全称 |
%b | 月份的简写形式 |
%B | 月份的全称 |
%c | 日期和时间 |
%d | 月份中的日期,0-31 |
%H | 小时,00-23 |
%I | 12进制小时钟点,01-12 |
%j | 年份中的日期,001-366 |
%m | 年份中的月份,01-12 |
%M | 分,00-59 |
%p | 上午或下午 |
%S | 秒,00-60 |
%u | 星期几,1-7 |
%w | 星期几,0-6 |
%x | 当地格式的日期 |
%X | 当地格式的时间 |
%y | 年份中的最后两位数,00-99 |
%Y | 年 |
%Z | 地理时区名称 |
根据这些参数我认为选择%c是最好的选择,组合命令后输入格式如下:
# ping 127.0.0.1 | awk '{ print $0"\t" strftime("%c",systime()) }'
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 2019年04月03日 星期三 13时07分56秒
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.060 ms 2019年04月03日 星期三 13时07分56秒
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.065 ms 2019年04月03日 星期三 13时07分57秒
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.056 ms 2019年04月03日 星期三 13时07分58秒
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.051 ms 2019年04月03日 星期三 13时07分59秒
注意:使用 fflush() ,不然文件不会有信息,因为awk也是有缓存的。
ping 127.0.0.1 | awk '{ print $0"\t" strftime("%Y-%m-%d %H:%M:%S",systime()); fflush()}' >> ping.log &
至此linux下带时间ping的问题解决。