[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+\를 사용하여 기호를 보낼 때마다 핑이 다시 시작되고 통계가 기록되지 않습니다. 가능하다면 핑을 다시 시작하지 않고도 터미널에서 통계를 일시 중지하고 볼 수 있기를 바랍니다.
[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에서 사용되는지 테스트하는 것처럼 보이므로 --foreground
yout 명령에 옵션을 추가하십시오 .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