серверный скрипт продолжает отправлять электронные письма, когда это не должно - PullRequest
0 голосов
/ 13 июня 2019

Я написал скрипт для запуска из cron каждые 5 минут.

Он принимает существующий IP-адрес в файле с именем "nowipaddr", а затем запускает цикл if, чтобы проверить новый IP-адрес с существующим IP-адресом, и, если оба IP-адреса остаются прежними, он может пропустить отправку электронной почты. В противном случае при изменении IP-адреса следует отправить электронное письмо с новым IP-адресом.

Проблема в том, что он по-прежнему отправляет мне электронное письмо каждые 5 минут, независимо от того, изменяется IP или нет. Если есть изменения, он обновляет файл "nowipaddr" с новым IP-адресом и отправляет электронное письмо. Если нет изменений, он делает то же самое.

Я скопировал код из этого ответа https://askubuntu.com/questions/374894/server-script-that-sends-an-email-every-time-the-global-ip-changes?fbclid=IwAR3mU7n5oMEMcJPTV8P5y8Icy01x4-iH4Bc6Lck3vWJNUHNxaCNJUtmvElg

#!/bin/bash
NOWIPADDR="/home/scripts/nowipaddr"
GETIPADDR="dig +short myip.opendns.com @resolver1.opendns.com"
LOG="/home/scripts/ip.log"
timestamp=$( date +%T )
curDate=$( date +"%m-%d-%y" )

if [ -f $NOWIPADDR ]; then
    if [[ `$GETIPADDR` = $(< $NOWIPADDR) ]]; then
        echo $curDate $timestamp " IP address check: " $(< $NOWIPADDR) >> $LOG
    else
        $GETIPADDR > $NOWIPADDR
        mail -s "New Server IP" email@gmail.com < $NOWIPADDR
    fi
else
    curl $GETIPADDR > $NOWIPADDR
    mail -s "Server IP" email@gmail.com < $NOWIPADDR
fi

Я хочу, чтобы он отправлял электронное письмо как раз при изменении IP

1 Ответ

0 голосов
/ 13 июня 2019

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

#!/bin/bash
NOWIPADDR="/home/scripts/nowipaddr"
GETIPADDR="dig +short myip.opendns.com @resolver1.opendns.com"
LOG="/home/scripts/ip.log"
timestamp=$( date +%T )
curDate=$( date +"%m-%d-%y" )

if [ -f $NOWIPADDR ]; then
   if [ `cat $NOWIPADDR` = `$GETIPADDR` ]; then
     echo $curDate $timestamp " IP address check: " `cat $NOWIPADDR` >> $LOG
   else
     $GETIPADDR > $NOWIPADDR
     mail -s "New Server IP" email@gmail.com < $NOWIPADDR
   fi
else
   curl $GETIPADDR > $NOWIPADDR
   mail -s "Server IP" email@gmail.com < $NOWIPADDR
fi

Я изменил

if [[ `$GETIPADDR` = $(< $NOWIPADDR) ]]; then

на

if [ `cat $NOWIPADDR` = `$GETIPADDR` ]; then

на основании другого ответа по той же ссылке

...