인터넷 연결이 끊어지는 시기를 모니터링하는 한 줄 명령을 작성하려고 합니다.
ping www.google.com
무기한으로 실행하는 경우(초당 1개의 ping) "timeout"이라는 단어가 출력 줄에 있으면 다른 명령이 실행되지만 해당 ping
명령은 무기한으로 계속 실행되도록 하고 싶습니다 .
이 명령어를 OS X에서 실행하고 있어서 다른 명령어도 이런데 say fail
, 터미널 창을 보지 않으면 문제가 있다는 소리가 들립니다.
한 줄 명령이 불가능하다면 bash 스크립트가 가능합니다.
나는 이것을 시도했습니다 :
ping www.google.com | grep timeout ; say fail
그러나 명령은 say
사용자가 수동으로 종료하는 경우 ping
에만 실행됩니다 .
그런 다음 이것을 시도했습니다.
if ping www.google.com | grep timeout ; then say fail ; fi
그러나 이것은 say
명령을 실행하지 않습니다.
답변1
문제는 절대 종료되지 않는 ping 명령에서 발생합니다.
ping
한 번 테스트해야 하는 루프를 만들어야 합니다 -c 1
.
while [ true ] ; do if ping -c 1 www.google.com | grep timeout ; then say fail ; fi ; sleep 1 ; done
편집하다
- 저는
bash
while 루프를 작성했습니다. 어쩌면 이를 쉘 프로그램에 적용해야 할 수도 있습니다(저는 오랫동안 Mac OS X를 사용했습니다). - 루프가 CPU를 너무 많이 소모하는 것을 방지하기 위해 몇 가지 일시 중지(1초)를 추가했습니다.