ping을 위한 bash 스크립트 만들기

ping을 위한 bash 스크립트 만들기

안녕하세요. 다음 명령을 ping -c 4 -i "IP"3번 수행하는 bash 스크립트가 필요합니다. 각 Ping은 10분 간격으로 수행되어야 하며, 3번 실패할 경우에만 이메일이 전송됩니다. 도와주세요?

전임자.

ping -c 4 -i X.X.X.X

실행 유형: ping 우선 모든 패킷이 손실된 경우 10분 동안 기다린 후 ping 명령을 다시 실행하십시오. 그래도 실패하면 마지막 ping 명령을 실행하십시오.

#!/bin/bash
HOSTS="X.X.X.X"

pingtest(){
  for myHost in "$@"
  do
    ping -c 4 -i 5 $HOSTS && return 1
  done
  return 0
}

if pingtest $HOSTS
then
  # 100% failed
  echo "Server failed" | mail -s "Server Down" [email protected]

fi

하지만 이를 3번 반복하고 패킷 손실이 실패한 후에만 이메일을 보내는 방법은 무엇입니까? 감사해요

답변1

외부 프로그램 사용이 허용되는 경우 다음을 사용할 수 있습니다.IP 모니터링. C로 작성되었으며 매우 구성 가능합니다. 지속적으로 반복되고 실행되는 bash 스크립트 또는 cron 작업 과 달리 ping1% 미만의 CPU 시간을 소비하면서 초당 100개의 핑을 실행할 수 있습니다.

예를 들어 다음과 같이 사용할 수 있습니다.

sudo ./monitor-ip --interval 5.0 --missed-max 20 --reset -- 1.2.3.4 \
        bash -c 'mail -s "Server Down!" [email protected] <<< "$MONITOR_NOTIFY_REMOTE_ADDRESS unreachable"'

1.2.3.420개의 연속 퐁이 수신되지 않을 때까지(1분의 가동 중지 시간) 5초 간격으로 핑을 보낸 다음 다음 주소로 이메일을 보냅니다.[이메일 보호됨]. 상태 조건이 해결될 때까지 1분 간격으로 계속 이메일을 보냅니다.

전체 공개: 내가 썼습니다IP 모니터링.

답변2

다음은 핑 결과를 얻는 방법의 예입니다.

#!/bin/bash

HOST="X.X.X.X"
WAITFOR=5
TIMES=3

ping $HOST -c $TIMES -i $WAITFOR &> /dev/null
pingReturn=$?

if [ $pingReturn -eq 0 ]; then
    # It works
    echo "Success!!!"
    exit 0
else
    # No access
    echo "Fail"
    exit 1
fi

제가 입력한 echo 문 대신 귀하의 방법을 사용하여 이메일을 보낼 수 있습니다. 또한 원하는 값으로 설정할 수 있는 세 가지 변수 HOSTTIMES가 있습니다 . WAITFOR핑 간격을 10분으로 설정하려면 WAITFOR값으로 설정해야 합니다 600.

답변3

아래 스크립트는 다음 시나리오에 적합합니다.

 #!/bin/bash
    echo "enter the hostname or IP of the host"
    read h
    ping -c1 $h
    if [ $? != 0 ]
    then
    sleep 6
    ping -c1 $h
    if [ $? != 0 ]
    then
    sleep 6
    ping -c1 $h
    if [ $? != 0 ]
    then
    echo "host $h is not pinging  and its not reachable"
    mail -s "host $h is not pinging  and its not reachable" emailid </dev/null
    else
    echo "host $h is pinging"
    fi
    fi
    fi

관련 정보