當伺服器連接到網際網路時,Shell 腳本會取得電子郵件通知

當伺服器連接到網際網路時,Shell 腳本會取得電子郵件通知

我想檢查伺服器是否已連接到互聯網。我嘗試執行以下腳本,但沒有成功,該腳本每 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 可能更好,對吧?

if [$? -eq 0]  

或這個

if [$? -e 0]  

只是一個打字錯誤?

相關內容