服务器脚本在不该发送邮件时会不断发送电子邮件

时间:2019-06-12 21:38:15

标签: linux ubuntu cron ip

我编写了一个脚本,每5分钟从cron运行一次。

它将现有IP放入名为“ nowipaddr”的文件中,然后运行if循环以使用现有IP检查新IP,如果两个IP都相同,则可以跳过发送电子邮件的操作。否则,如果IP发生更改,则应发送包含新IP的电子邮件。

问题在于,无论IP是否更改,它仍然每5分钟向我发送一封电子邮件。如果有更改,它将使用新IP更新文件“ nowipaddr”并发送电子邮件。如果没有更改,则会执行相同的操作。

我从答案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 :(得分:0)

尽管我想确保这是正确的方法,但我对代码进行了一些更改,使它们看起来运行良好

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

基于相同链接的其他答案