서버가 인터넷에 연결되면 쉘 스크립트가 이메일 알림을 받습니다.

서버가 인터넷에 연결되면 쉘 스크립트가 이메일 알림을 받습니다.

서버가 인터넷에 연결되어 있는지 확인하고 싶습니다. 나는 5분마다 실행되고 인터넷에 연결되어 있는지 확인하고 이메일을 보내는 다음 스크립트를 성공적으로 시도하지 못했습니다.

 ping -c 3 192.168.0.25 > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
      mailx -s "Server is Up" -t "[email protected]" < /dev/null   
  fi

하지만 문제는 연결이 설정되면 5분마다 계속 이메일을 받는다는 것입니다. 이 문제를 어떻게 해결합니까?

답변1

상태에 대한 알림을 받는 것이 아니라 상태 변경에 대한 알림을 받고 싶기 때문입니다. 따라서 다음과 같이 이전 상태가 어땠는지 기억해야 합니다.

#! /bin/bash

statusFile=/var/tmp/connected # used to remember status
pingedHost=8.8.8.8
checkPeriod=5 # seconds

while true
do
    echo "Sleeping..."
    sleep $checkPeriod
    echo "Checking..."
    ping -c 1 $pingedHost > /dev/null 2>&1
    if [[ $? -eq 0 ]]
    then
        echo "Ping OK..."
        if [[ ! -f $statusFile ]] # not connected already
        then
            echo "Reconnected..."
            # send reconnection mail here
            touch $statusFile # remember state
        fi
    else
        echo "Ping KO..."
        if [[ -f $statusFile ]] # was connected before
        then
            echo "Disconnected..."
            # send disconnection mail here
            rm $statusFile # remember state
        fi
    fi
done

답변2

-e보다는 결과가 0인지 확인하는 것이 더 나을 수도 있습니다. 그렇죠?

if [$? -eq 0]  

아니면 이거

if [$? -e 0]  

그냥 오타인가요?

관련 정보