Сценарий оболочки получает уведомление по электронной почте, когда сервер подключен к Интернету

300
Ash

Я хочу проверить, подключен ли сервер к Интернету или нет. Я попытался выполнить следующий сценарий безуспешно, который запускается каждые 5 минут и проверяет и отправляет электронное письмо, если он подключен к Интернету.

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

Но проблема в том, что я буду получать электронные письма каждые 5 минут после установления соединения. Как это исправить?

2
Какого рода уведомления вы хотите? AFH 5 лет назад 0
Желательно по электронной почте Ash 5 лет назад 0
Но это то, что вы делаете! Как вы хотите, чтобы это работало по-другому? AFH 5 лет назад 0

2 ответа на вопрос

2
xenoid

Потому что вы не хотите получать уведомления о статусе, но об изменении статуса. Так что вы должны где-то вспомнить, какой был предыдущий статус, что-то вроде:

#! /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 
0
Kyrie001

Может быть лучше проверить, равен ли результат нулю, а не -e, верно?

if [$? -eq 0] 

Или это

if [$? -e 0] 

это просто ошибка ввода?

Извините, это опечатка Ash 5 лет назад 0

Похожие вопросы