我有一个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 [email protected] \
    -s smtp.gmail.com:587 -xu [email protected] -xp xxxxxx \
    -t [email protected] \
    -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总是一样的。我不知道为什么,有人能帮忙吗?

最佳答案

什么是./current
您没有在脚本中使用绝对路径,因此文件将位于运行它的任何位置。你应该使用绝对路径。
cron和命令行运行之间唯一的另一个显著区别是执行脚本的用户的帐户。确保帐户(如果不是root)具有执行您要求它执行的操作的重要权限。
或者,更好的是,使用已建立的动态DNS客户端,这样您就不需要关心外部主机名。你真的意识到你是在依赖那个网站诚实和正直,对吧?

关于bash - Cron工作与独立工作不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9238884/

10-11 17:44