네트워크 가용성을 확인하는 ping 스크립트

네트워크 가용성을 확인하는 ping 스크립트

인터넷이 사용 가능한지 확인하기 위해 4개의 호스트에 ping을 보내는 ddwrt용 스크립트를 만들고 싶습니다. 4가지 테스트 중 하나에서 실제 ping 결과가 나오면 인터넷이 정상적으로 작동하고 있는 것으로 간주하고, 그렇지 않으면 연결이 없는 것입니다. 이러한 테스트 중 하나 이상을 구현해야 합니다.

이것이 제가 사용한 스크립트입니다.

#!/bin/sh
result=`ping -c 1 8.8.8.8 | grep -c from`
sleep 10
result+=`ping -c 1 www.google.com | grep -c from` 
# I want the output from this command to add into result variable. For example, if result value is 0 then add the value of next ping command into 0, same with the rest of the commands. Is that possible?
sleep 10
result+=`ping -c 1 www.microsoft.com | grep -c from`
sleep 10
result+=`ping -c 1 www.youtube.com | grep -c from`
if [ $result -ge 1 ] 
then 
echo "Internet alright"
   logger -t 'InternetCheck' 'Internet is Connected'
   logger "ping $result"
else
    logger -t 'InternetCheck' 'After many ping tests, the Internet is not working... will apply solution'
   
   logger "ping $result"
fi

ddwrt에는 이미 감시 기능이 포함되어 있지만 라우터가 재부팅되는 것을 원하지 않지만 이 시점에서 명령을 실행하여 문제를 해결하고 싶습니다. 다른 제안사항을 알려주시기 바랍니다.

인사!

답변1

몇 가지 생각:

  • ping종료 상태 있음 - 응답이 수신되면 0이고, 응답이 없으면 0이 아닙니다. grep 대신 이것을 사용할 수 있습니다.
  • 4개의 ping 명령을 병렬로 실행하고 wait기다릴 수도 있습니다. 이렇게 하면 인터넷 연결이 끊어졌음을 알기 전에 4번의 ping 실패를 기다릴 필요가 없습니다.
  • 또는 연결이 대부분의 경우 작동하는 경우 도달할 수 있는 대상 수는 몇 개인지 아니라 연결이 작동하는지 알고 싶기 때문에 첫 번째 핑 성공 후 중지할 수 있습니다.

이 스크립트(로깅 항목을 제외하고 2개의 IP에 대해서만 작동하며 쉽게 확장할 수 있음)는 매우 짧은 시간(스크립트가 최소 30초 + 핑 시간 초과 동안 실행됨) 후에 답변을 제공하고 상태 0 종료로 돌아갑니다. 또는 ping이 성공했는지 아니면 완전히 실패했는지에 따라 1입니다. -W 옵션을 사용하여 더 짧은 시간 초과를 설정합니다. 인터넷 연결이 실제로 불안정하지 않은 한 적어도 하나의 주소는 1초 내에 응답을 반환해야 합니다.

#!/bin/sh
IP1=8.8.8.8
IP2=4.4.4.4

#start first ping, remember its pid
ping -W 1 -c 1 $IP1 >/dev/null&
PID1=$!

# start second ping, remember its pid
ping -W 1 -c 1 $IP2 >/dev/null&
PID2=$!

# wait for pings to finish
if wait $PID1
then echo $IP1 is reachable, internet is working; exit 0
fi

if wait $PID2
then echo $IP2 is reachable, internet is working; exit 0
fi

# none reachable
echo all pings failed, internet is down
exit 1

관련 정보