ping은 통계를 파일로 출력합니다.

ping은 통계를 파일로 출력합니다.
[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

편집하다:알겠습니다. 로그 파일에 통계를 추가했지만 SIGINTCtrl+\를 사용하여 기호를 보낼 때마다 핑이 다시 시작되고 통계가 기록되지 않습니다. 가능하다면 핑을 다시 시작하지 않고도 터미널에서 통계를 일시 중지하고 볼 수 있기를 바랍니다.

[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

ping이 신호 처리를 설정하기 위해 tty에서 사용되는지 테스트하는 것처럼 보이므로 --foregroundyout 명령에 옵션을 추가하십시오 .timeout


또는 간단히 사용을 중지 timeout하고 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)를 수신한 후 파일을 닫습니다.Control-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

관련 정보