【问题标题】:Cron job works differently than as stand aloneCron 作业的工作方式与独立作业不同
【发布时间】:2012-02-11 08:33:00
【问题描述】:

我有一个 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总是一样的。不知道为什么,有大神帮忙吗?

【问题讨论】:

    标签: bash shell curl cron cat


    【解决方案1】:

    ./current 是什么?

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

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

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

    【讨论】:

    • interactive 和 cron 之间的差异比您断言的要大,并记录在多个常见问题解答中。
    • 是的,我知道。这只是让我们继续进行的临时解决方案。谢谢。
    • 有免费的 DDNS 方式吗?看起来所有 DDNS 服务提供商每年至少收费 20 美元。
    • @eric dyndns.org 曾经是免费的,但现在收费。如果您没有可以使用的服务器,我建议您使用rollernet.us - 他们是一个出色的电子邮件提供商,还提供 DNS(包括动态 DNS)。废话不多说,
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-22
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多