따라서 ISP에 보고할 수 있도록 네트워크 연결을 계속 감시하고 싶습니다. (모뎀은 하루에 한 번씩 30~60초 정도 나가는 것 같아요)
그래서 저는 이 편리한 작은 스크립트를 복사했습니다.
그리고 그것을 실행
watch -n 15 ./ping-test.sh
모뎀의 플러그를 뽑아서 테스트해봤습니다.
Watch가 처음으로 네트워크가 꺼진 후 스크립트를 실행하면 정상적으로 실행되고(일부 이메일 전송) 작동하지 않게 됩니다. 네트워킹이 복원되면 스크립트가 "완료"되고 watch가 다시 실행됩니다.
따라서 네트워크가 다운되면 메일을 받을 수 있지만 다운된 기간은 알 수 없습니다.
명령줄에서 바로 스크립트를 실행하면 스크립트가 실행(이메일)된 다음 종료됩니다.
이유가 무엇인가요? 네트워크가 다운된 후에도 스크립트가 계속 실행되도록 하려면 어떻게 해야 합니까?
답변1
핑목표에 도달할 수 없으면 중단되며 아마도 스크립트가 작동하지 않는 이유일 수 있습니다.핑아직 답변을 기다리고 있습니다. 추가해 보세요-w 마감 시간또는-W 시간 초과옵션에 대한핑.
답변2
"ip 모니터"를 사용하면 실시간으로 이를 수행할 수 있습니다. 그러면 IP 주소가 제거되거나 링크 상태가 작동에서 연결 끊김으로 변경되거나 어떤 방식으로든 경로가 변경되는 등 모든 이벤트가 출력됩니다.
ip monitor all >> /some/log.log &
추가 모드로 열어야 합니다. 터미널 외부에서 실행되도록 놔두려면 "disown %1"을 사용하여 작업을 거부하면 됩니다.
타임스탬프도 필요한 경우 몇 가지 방법이 있습니다. 쉬운 방법은 inotifywait를 사용하여 파일이 업데이트되었는지 확인한 다음 날짜를 추가하는 것입니다. 위의 작업과 이 작업을 쉘 스크립트로 수행하는 것이 쉬울 수 있으며 대신에 이를 무시할 수도 있습니다.
ip monitor all >> /some/log.log &
while inotifywait -qq -e modify /some/log.log; do
sleep 0.2;
date >>/root/mon.log;
done
즐기다
답변3
'watch' 명령을 사용한 솔루션이 좋지 않습니다. 나는 다음과 같이 이 문제를 해결하려고 합니다.
#!/bin/bash
HOSTS="foo.bar foo2.bar"
COUNT=4
while :
do
for myHost in $HOSTS
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
# 100% failed
echo "Host : $myHost is down (ping failed) at $(date)"
fi
done
sleep 15 # here is your refresh rate
done
그런 다음 일반 스크립트로 실행합니다: ./script_name.sh
Ctrl+C로 종료합니다.
답변4
이미 완료되었지만 watch
아직 살아있는 명령인 상위 프로세스에 의존하기 때문에 더 이상 존재하지 않습니다.
따라서 네트워크가 다운되면 메일을 받을 수 있지만 다운된 기간은 알 수 없습니다.
해당 스크립트는 이미 원격 시스템이 다운된 날짜를 인쇄하고 있습니다.
echo "Host : $myHost is down (ping failed) at $(date)" | mail -s "$SUBJECT" $EMAILID
네트워크가 다운된 후에도 스크립트가 계속 실행되도록 하려면 어떻게 해야 합니까?
ping
ing 이므로 -c 1
1개의 ECHO_REQUEST 패킷을 보낸 후 중지됩니다.
매분마다 실행되도록 cron에 넣으십시오.
*/1 * * * * /path/to/your/script