[root@localhost ~]# while true; do timeout -s 2 1h ping 96.120.16.121 | ts '%Y-%m-%d %H:%M:%S |' | tee -a ping.log; done
更容易阅读的格式:
#!/bin/bash
while true; do
timeout -s 2 1h ping 96.120.16.121 |
ts '%Y-%m-%d %H:%M:%S |' |
tee -a ping.log
done
预期输出:
[root@localhost ~]# cat ping.log
2015-10-30 07:35:29 | PING 96.120.16.121 (96.120.16.121) 56(84) bytes of data.
2015-10-30 07:35:29 | 64 bytes from 96.120.16.121: icmp_seq=1 ttl=254 time=11.2 ms
2015-10-30 07:35:30 | 64 bytes from 96.120.16.121: icmp_seq=2 ttl=254 time=9.83 ms
2015-10-30 07:35:31 | 64 bytes from 96.120.16.121: icmp_seq=3 ttl=254 time=13.0 ms
2015-10-30 07:35:32 | 64 bytes from 96.120.16.121: icmp_seq=4 ttl=254 time=17.0 ms
2015-10-30 07:35:33 | 64 bytes from 96.120.16.121: icmp_seq=5 ttl=254 time=20.8 ms
5/5 packets, 0% loss, min/avg/ewma/max = 9.839/14.399/13.129/20.850 ms
Quit
实际的:
[root@localhost ~]# cat ping.log
2015-10-30 07:35:29 | PING 96.120.16.121 (96.120.16.121) 56(84) bytes of data.
2015-10-30 07:35:29 | 64 bytes from 96.120.16.121: icmp_seq=1 ttl=254 time=11.2 ms
2015-10-30 07:35:30 | 64 bytes from 96.120.16.121: icmp_seq=2 ttl=254 time=9.83 ms
2015-10-30 07:35:31 | 64 bytes from 96.120.16.121: icmp_seq=3 ttl=254 time=13.0 ms
2015-10-30 07:35:32 | 64 bytes from 96.120.16.121: icmp_seq=4 ttl=254 time=17.0 ms
2015-10-30 07:35:33 | 64 bytes from 96.120.16.121: icmp_seq=5 ttl=254 time=20.8 ms
编辑:好的,我已经将统计信息附加到日志文件中,但是每当我SIGINT
使用 CTRL+\ 发送符号时,ping 都会重新启动,并且不会记录统计信息。如果可能的话,我希望能够仍然暂停并查看终端中的统计信息,而无需重新启动 ping
[root@localhost ~]# while true; do ping -w 3600 96.120.16.121 | ts '%Y-%m-%d %H:%M:%S |' | tee -i -a ping.log; done
脚本:
#!/bin/bash
while true; do
ping -w 3600 96.120.16.121 |
ts '%Y-%m-%d %H:%M:%S |' |
tee -i -a ping.log
done
答案1
将--foreground
选项添加到 youttimeout
命令,因为 ping 似乎测试它是否在 tty 上使用来设置信号处理。
或者干脆停止使用timeout
并要求 ping 在 60*60 秒后停止:
ping -w 3600 96.120.16.121
对于您的新问题,请忽略管道其余部分中的信号:
#!/bin/bash
ping -w 3600 96.120.16.121 |
( trap '' quit
ts '%Y-%m-%d %H:%M:%S |' |
tee -i -a ping.log
)
答案2
默认情况下,球座命令停止写入并在收到停止信号后关闭文件(a控制-C, 由...发送暂停命令)。
只需添加选项即可-我到球座玩得开心。
例子:
#!/bin/bash
while true; do
timeout -s 2 1h ping 96.120.16.121 |
ts '%Y-%m-%d~%H:%M:%S' |
tee -i ping_$(date +'%Y-%m-%d_%H.%M.%S').log
done
答案3
这会无限期地运行,永远不会重新启动 ping,ping 会定期打印统计信息(调整sleep
以下代码中的 )。 Bash 是可选的,它与 /bin/sh 兼容。您可以使用 CTRL-C 或 SIGHUP、SIGINT、SIQUIT 或 SIGTERM 来终止它。
#!/bin/sh
trap 'kill -TERM $! 2>/dev/null; exit' HUP INT QUIT TERM
while true; do
(
ping localhost 2>&1 &
trap "kill -INT $!" HUP INT QUIT TERM
while true
do
sleep 5;
if ! ps $! > /dev/null || ! kill -QUIT $!
then break
fi
done &
wait
) |
ts '%Y-%m-%d~%H:%M:%S' |
tee -i ping_$(date +'%Y-%m-%d_%H.%M.%S').log
done