watch를 사용하여 쉘 스크립트를 실행하지만 스크립트가 작동하지 않습니다.

watch를 사용하여 쉘 스크립트를 실행하지만 스크립트가 작동하지 않습니다.

따라서 ISP에 보고할 수 있도록 네트워크 연결을 계속 감시하고 싶습니다. (모뎀은 하루에 한 번씩 30~60초 정도 나가는 것 같아요)

그래서 저는 이 편리한 작은 스크립트를 복사했습니다.

http://www.cyberciti.biz/tips/simple-linux-and-unix-system-monitoring-with-ping-command-and-scripts.html

그리고 그것을 실행

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

네트워크가 다운된 후에도 스크립트가 계속 실행되도록 하려면 어떻게 해야 합니까?

pinging 이므로 -c 11개의 ECHO_REQUEST 패킷을 보낸 후 중지됩니다.

매분마다 실행되도록 cron에 넣으십시오.

*/1 * * * * /path/to/your/script

관련 정보