인터넷 연결 드롭 알림


9

5 분 동안 인터넷에 연결되어 있지 않을 때 경고 (PC 스피커)를 재생하는 소프트웨어는 무엇입니까?

스위치 / 라우터가 며칠마다 연결이 끊어진 것으로 보이며 스위치가 발생하면 재설정하고 싶습니다.

PC          -- TP-Link switch/router -- FO
192.168.x.1 -- 192.168.x.2 / x.y.z.a -- a.b.c.d

3
명백한 점을 지적하지는 않지만 잘못된 스위치 / 라우터 문제에 대해 매우 우회적 인 해결책을 찾고 있습니다.
Michael Mrozek

답변:


7

이 스크립트의 수정 된 버전을 사용하여 원하는 작업을 수행 할 수 있습니다.

#!/bin/bash

downTime=0
lastAccessTime=$(date +"%s")
while [ true ]; do
if ! ping -c1 google.com >& /dev/null; then
    downTime=$(( $(date +"%s") - $lastAccessTime ))
else
    downTime=0
    lastAccessTime=$(date +"%s")
fi

sleep 15

if [ $downTime -ge 300 ]; then
   echo "alert"
fi
done

우리는 "연결되었습니다"예

디버깅을 켜면 스크립트의 기능을 확인할 수 있습니다.

set -x

"연결 상태"상태를 보여주기 위해 유효한 호스트 이름으로 실행 중입니다.

$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'

위의 두 변수를 초기화하고 루프를 마지막으로 통과 한 시간을 결정합니다 $lastAccessTime. 이제 Google에 핑을 시도합니다.

+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955

이제 $downTime핑이 실패하면 다운 타임을 계산하고 , 그렇지 않으면 $downTime0으로 재설정 하고 다시 계산 $lastAccessTime합니다.

+ sleep 15

이제 15 초 동안 기다립니다.

+ '[' 0 -ge 300 ']'

이제 5 분 이상 (300 초) 동안 다운되었는지 확인합니다. 그런 다음 while루프 반복을 반복 합니다.

+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....

우리가 일어나면 ping15 초마다 명령 을 확인하는 것 외에는 아무 일도 일어나지 않습니다 .

우리는 "연결이 끊어졌습니다"예

이제 "연결이 끊어졌습니다"상태를 시뮬레이션하기 위해 핑하는 호스트 이름을 바꾸고 가짜 이름을 사용합니다 google1234567890.com. 디버깅이 활성화 된 상태에서 스크립트 실행을 반복하면 실제 가동 중지 시간이 계산됩니다.

$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402277506
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=0
+ sleep 15
+ '[' 0 -ge 300 ']'
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=15
+ sleep 15
...

위의 $downTime15 초는 지금까지와 같습니다. 조금 더 기다리면 다음과 같이 표시됩니다.

+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15

다운 타임 300 초가 발생했습니다. 이제 확인하면 메시지가 인쇄 alert됩니다.

+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15

이 상태는 연결이 복원되고 ping다시 성공할 때까지 계속됩니다 .

소리는 어떻습니까?

쉽습니다. 이를 위해 다양한 도구를 사용할 수 있습니다. 내가 좋아하는 뭔가를 사용하는 것 sox또는 mplayer그러한 같은 오디오 파일을 재생 .mp3하거나 .wav연결이 아래로있는 동안, 당신은 15 초마다 듣고 싶지 적절한 사운드 파일.

mplayer someaudio.wav

alert연결이 끊겼다는 오디오 피드백을 받으려면 위 의 메시지를이 줄로 바꾸 십시오.

Ping 문제 해결

ping위와 같은 방식으로 사용 ping하면 연결이 끊어졌을 때 실패 하는 데 문자 그대로 10-20 초가 걸리는 느린 지연 시간이 발생할 수 있습니다. 이 U & L Q & A에 대한 내 답변 제목 : 명령의 출력을 리디렉션하는 방법은 무엇입니까? fing대신 명령 행 도구를 사용하는 예제 입니다. 이 도구는 기존보다 더 빨리 실패합니다 ping.


Btw beep명령을 사용 하고 있습니다. 안전 chown /dev/tty0하지 sudo않습니까?
Kokizzu

1
@Kokizzu-아니요 /dev/tty0. 소유권을 변경해서는 안됩니다 .
slm

1
만세 sox! @Kokizzu -상의 권한을 떠나기에 대한 SLM의 권리 /dev/tty0형 장치,하지만 당신은 얻을 수있는 의사 터미널 /dev/pts/[num] 문자 장치의 같은 종류의 그 - 장치를 xterm예를 들어 각각의 창에 사용 - 같은과 screen또는 tmux심지어 나 ssh. 이것들은 /dev/ptmx어쨌든 마스터 장치 에 대한 슬레이브 장치 일뿐 아니라 사용자 소유 /bin/login프로세스 와 같은 종류의 문제를 일으키지 않기 때문에 보다 안전하게 제어 할 수 있습니다 . 이는 다른 경우에 발생할 수 있습니다.
mikeserv 2016 년

aplay alert.wavALSA 시스템의 일부인 사운드를 재생하는보다 표준적인 방법이며 대부분의 배포판에 미리 번들로 제공됩니다.
Ray Foss

4

Linux를 사용하는 경우 스크립트 내에서 ping을 사용 google.com하여 예를 들면 다음과 같습니다.

counter=0
while [ true ]
do
ping -c 1 google.com > /dev/null 2>&1
if [ $? -ne 0 ] 
then
    let "counter +=1"
else
    let "counter = 0"
fi
if [ $counter -eq 300 ] # we assume that one ping need one second (300 is 5 minutes)
then
   echo "alert"
fi
done

3
이것은 작동하지만 fing대신을 사용하는 것이 좋습니다 ping. pingcmd를. 실패하면 약간의 시간이 걸릴 수 있습니다. 반면에 fing명령은 1 초 내에 실패합니다. 자세한 내용은이 Q & A에 대한 A를 참조하십시오. 명령의 출력을 리디렉션하는 방법은 무엇입니까? . 난 둘 다 사용하여 표시 ping하고 fing.
slm

@slm, 편집 해 주셔서 감사합니다. 핑을 1 초 동안 만 지속하는 방법이 혼란 스러웠습니다
Nidal

이더넷이 전원을 잃는 경우와 같이 즉시 응답하면 초당 ping을 무제한으로 실행하는 것처럼 보입니다. sleep 1이것을 막기에 충분합니다.
Ray Foss
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.