programing

bash 스크립트에서 ping을 사용하여 호스트 가용성 확인

nasanasas 2020. 11. 23. 08:15
반응형

bash 스크립트에서 ping을 사용하여 호스트 가용성 확인


하루 종일 온라인 상태 여야하는 네트워크의 장치가 실제로 온라인 상태인지 계속 확인하는 스크립트를 작성하고 싶습니다. 핑을 사용하려고했지만

if [ "`ping -c 1 some_ip_here`" ]
then
  echo 1
else
  echo 0
fi

제공하지 않습니다 1상관없이 내가 유효하거나 유효하지 않은 IP 주소를 입력합니다. 특정 주소 (또는 IP 주소 목록에서 더 나은 장치)가 오프라인 상태인지 어떻게 확인할 수 있습니까?


Ping은 오류 유형에 따라 다른 종료 코드를 반환합니다.

ping 256.256.256.256 ; echo $?
# 68

ping -c 1 127.0.0.1 ; echo $?
# 0

ping -c 1 192.168.1.5 ; echo $?
# 2

0은 호스트에 연결할 수 있음을 의미합니다.

2는 연결할 수 없음을 의미합니다.


if 문에는 백틱이 필요하지 않습니다. 이 수표를 사용할 수 있습니다

if ping -c 1 some_ip_here &> /dev/null
then
  echo 1
else
  echo 0
fi

if 명령은 다음 명령 (ping)의 종료 코드를 확인합니다. 종료 코드가 0이면 (명령이 성공적으로 종료되었음을 의미) then 블록이 실행됩니다. 0이 아닌 종료 코드를 반환하면 else 블록이 실행됩니다.


ping의 고급 버전 인 "fping"이 있습니다. 이는 시간 제한을 밀리 초 단위로 정의 할 수있는 가능성을 제공합니다.

#!/bin/bash
IP='192.168.1.1'
fping -c1 -t300 $IP 2>/dev/null 1>/dev/null
if [ "$?" = 0 ]
then
  echo "Host found"
else
  echo "Host not found"
fi

이렇게 달리는 라이너 하나를 생각할 수 있습니다

ping -c 1 127.0.0.1 &> /dev/null && echo success || echo fail

127.0.0.1을 IP 또는 호스트 이름으로 바꾸고, echo 명령을 두 경우 모두 수행해야하는 작업으로 바꾸십시오.

위의 코드는 성공할 것입니다. 액세스 할 수없는 IP 또는 호스트 이름으로 시도해보십시오.

이렇게 :

ping -c 1 google.com &> /dev/null && echo success || echo fail

ping -c 1 lolcatz.ninja &> /dev/null && echo success || echo fail

참고로 위의 방법을 사용하여 몇 가지 테스트를 수행했으며 멀티 핑 (10 개 요청)을 사용하는 경우

ping -c10 8.8.8.8 &> / dev / null; 에코 $?

다중 핑 명령의 결과는 핑 결과 중 하나 이상에 도달 할 수있는 경우 "0"이되고 모든 핑 요청에 도달 할 수없는 경우 "1"이됩니다.


up=`fping -r 1 $1 `
if [ -z "${up}" ]; then
    printf "Host $1 not responding to ping   \n"
    else
    printf "Host $1 responding to ping  \n"
fi

참고 URL : https://stackoverflow.com/questions/18123211/checking-host-availability-by-using-ping-in-bash-scripts

반응형