ping 스크립트 - 호스트 다운 vs 네트워크에 없는 호스트

ping 스크립트 - 호스트 다운 vs 네트워크에 없는 호스트

다운된 서버와 더 이상 네트워크에 없는 서버를 구별하려고 하는 다음 스크립트가 있습니다. 방금 다운된 서버의 명령줄에서 ping 명령을 사용하고 $? 예상대로 1을 얻습니다. 더 이상 네트워크에 없는 서버의 명령줄에서 ping 명령을 사용하고 에코하면 $?예상대로 2가 표시됩니다. 내 스크립트에서는 이 동작을 포착할 수 없는 것 같습니다. 아래 스크립트에서는 더 이상 네트워크에 없는 서버가 badhosts출력 파일에 전혀 표시되지 않습니다. 결과를 왜곡시키는 출력에 호스트 알 수 없는 줄을 가져오고 싶지 않기 때문에 핑 라인에 dev null을 사용하고 있습니다.

#!/bin/ksh
# Take a list of hostnames and ping them; write any failures
#set -x

for x in `cat hosts`
do
ping -q -c 1 $x > /dev/null 2> /dev/null

if [ "$?" -eq 1 ];then
        echo $x is on network but down >> badhosts
elif [ "$?" -eq 2 ];then
        echo $x is not on the network >> badhosts
  fi
done

답변1

스크립트를 다음과 같이 수정했는데 작동합니다.

#!/bin/ksh
# Take a list of hostnames and ping them; write any failures
set -x

for x in `cat hosts`
do
ping -c 1 $x > /dev/null 2> /dev/null
pingerr=$?

if [ $pingerr -eq 1 ]; then
        echo $x is on network but down >> badhosts
fi

if [ $pingerr -eq 2 ]; then
        echo $x is not on the network >> badhosts
fi
done

관련 정보