我有一个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总是一样的。我不知道为什么,有人可以帮忙吗?
答案 0 :(得分:2)
什么是./current
?
您没有在脚本中使用绝对路径,因此该文件将位于运行的任何位置。你应该使用绝对路径。
cron
与命令行运行之间唯一的另一个显着区别是脚本执行的用户。确保该帐户(如果不是root
)具有执行您要求它执行操作的重要权限。
或者,更好的是,使用已建立的动态DNS客户端,这样您就不必关心外部主机名。您确实意识到您依赖该网站既诚实又向上,对吧?
答案 1 :(得分:2)
在脚本开始时,您应该将目录更改为正确的目录(作为猜测)。或者使用绝对路径。