我编写了一个脚本,每5分钟从cron运行一次。
它将现有IP放入名为“ nowipaddr”的文件中,然后运行if循环以使用现有IP检查新IP,如果两个IP都相同,则可以跳过发送电子邮件的操作。否则,如果IP发生更改,则应发送包含新IP的电子邮件。
问题在于,无论IP是否更改,它仍然每5分钟向我发送一封电子邮件。如果有更改,它将使用新IP更新文件“ nowipaddr”并发送电子邮件。如果没有更改,则会执行相同的操作。
#!/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发生变化时发送电子邮件
答案 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
基于相同链接的其他答案