인터넷 연결 드롭 알림


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.