Traceroute 명령의 출력을 캡처하는 bash/셸 스크립트를 만듭니다.

Traceroute 명령의 출력을 캡처하는 bash/셸 스크립트를 만듭니다.

나는 Traceroute 명령을 사용하여 WAN 링크를 모니터링하는 데 도움이 되는 스크립트를 준비하고 있습니다.

  • 추적 경로에서 기본 WAN IP를 수집하고, 발견되면 기본 노드가 작동 중임을 알리는 스크립트입니다.
  • 기본 IP를 찾을 수 없으면 추적 경로에서 보조 IP를 grep하고 기본은 아래로, 보조는 UP을 에코합니다.
  • 두 IP 모두 찾을 수 없으면 echo PRimary와 보조가 모두 닫힙니다.

비슷한 것을 준비했는데 제대로 작동하지 못했습니다.

 echo "`traceroute  4.4.4.4>/tmp/trace.txt`"
 grep  “1.1.1.1” /tmp/trace.txt &> /dev/null
 if [ $? -eq 0 ] ; then
     echo  “Primary Is UP“
 else
 grep  “2.2.2.2” /tmp/trace.txt &> /dev/null
 if [ $? -eq 0 ] ; then
     echo “ Primary failed, Secondary Running”
else
     echo "Primary & Secondary both failed"
 fi
 fi

답변1

빠른 테스트를 위해 필요하지 않은 경우 Traceroute를 사용하지 마십시오. 레코드 경로(-R) 옵션을 사용하여 핑을 시도해보세요. 요청을 하나만 만들려면 -c 옵션을 사용하고, 라우팅 호스트 이름을 확인하지 않으려면 -n 옵션을 사용하고, 실패할 때까지 너무 오래 기다리지 않으려면 -W 옵션을 사용하세요. 어쩌면 다음과 같은 것일 수도 있습니다.

if ping -R -n -c1 -W2 4.4.4.4 >/tmp/trace.txt
then
    #echo something is up
    if grep -q '\<1\.1\.1\.1\>' /tmp/trace.txt
    then
        echo  Primary Is UP
    elif grep -q '\<2\.2\.2\.2\>' /tmp/trace.txt
    then
        echo  Primary failed, Secondary Running
    else
        echo "Primary & Secondary both failed, but something else Running"
    fi
else
    echo "Primary & Secondary both failed"
fi

기록 경로를 준수하도록 하나 이상의 라우터를 설득해야 할 수도 있습니다.

답변2

echo스크립트의 첫 번째 줄에서 따옴표를 제거 하고 명령을 그대로 유지하세요 traceroute. 스크립트는 다음과 같이 작성되어야 합니다.

traceroute .... 
grep .....
...

관련 정보