안녕하세요. 다음 명령을
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 작업 과 달리 ping
1% 미만의 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.4
20개의 연속 퐁이 수신되지 않을 때까지(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 문 대신 귀하의 방법을 사용하여 이메일을 보낼 수 있습니다. 또한 원하는 값으로 설정할 수 있는 세 가지 변수 HOST
및 TIMES
가 있습니다 . 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