2

我有一个 shell 脚本,它会定期检查 ADSL 外部 IP 地址,并在它发生更改时将其发送到我的电子邮件。

#! /bin/sh
NEWIP=`/usr/bin/curl ifconfig.me`
OLDIP=`cat ./current`
logger "$NEWIP ...  $OLDIP"
if [ "$NEWIP" != "$OLDIP" ]; then
    TIME=`/bin/date`
    /usr/bin/sendEmail -v -f ip_watcher@xxxoo.com \
    -s smtp.gmail.com:587 -xu ip_watcher@xxxoo.com -xp xxxxxx \
    -t xxx@xxxxx.com \
    -o tls=yes \
    -u "$NEWIP" \
    -m "$NEWIP  $TIME" -a
    /bin/echo "$NEWIP" > ./current
    logger "IP of bjserver1 has changed ..."
else 
     logger "New IP is the SAME with old. not sending ..."
fi

当我从命令行运行它时,这非常有效。但是我把它放入cron之后,NEWIP和OLDIP总是一样的。我不知道为什么,有人可以帮忙吗?

4

2 回答 2

2

是什么./current

您没有在脚本中使用绝对路径,因此该文件将在其运行的任何位置。您应该使用绝对路径。

与命令行运行之间唯一的其他显着区别cron是脚本在其帐户下执行的用户。确保该帐户(如果不是root)具有执行您要求它执行的操作的重要权限。

或者,更好的是,使用已建立的动态 DNS 客户端,这样您就无需关心外部主机名。您确实意识到您依靠该网站既诚实又向上,对吗?

于 2012-02-11T08:37:15.013 回答
2

在脚本开始时,您应该将目录更改为正确的目录(作为猜测)。或者使用绝对路径。

于 2012-02-11T08:38:34.070 回答