我正在尝试使用 DreamHost API(请参阅此处)使用 crontab 更新 DNS 条目。我编写了以下 bash 脚本:
#!/bin/bash
dh_api_key=<my api key>
dh_domain=<my fq subdomain>
dh_url="https://api.dreamhost.com/?key=$dh_api_key&record=$dh_domain&type=A"
ip_addr=`ifconfig eth0 | grep "inet addr" |
grep -o "\([0-9]\{1,3\}\.\?\)\{4\}" | head -n 1`
old_ip_addr=`wget -q -O - ""$dh_url&cmd=dns-list_records"" |
grep $dh_domain | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"`
dh_url="https://api.dreamhost.com/?key=$dh_api_key&record=$dh_domain&type=A"
dh_url_add="$dh_url&cmd=dns-add_record&value=$ip_addr"
dh_url_del="$dh_url&cmd=dns-remove_record&value=$old_ip_addr"
echo $ip_addr
echo $old_ip_addr
if [ "$ip_addr" == "$old_ip_addr" ]
then
echo SAME
else
echo DIFFERENT; UPDATING
wget -q -O - "$dh_url_del"
wget -q -O - "$dh_url_add"
fi
我的 crontab 条目如下所示:
0,15,30,45 * * * * /home/<username>/dreamhost_api/dns_update_script > /home/<username>/dreamhost_api/dns_update_script.out # <-- note the redirection
如果我手动运行脚本,我会得到以下输出:
<old ip address>
<new ip address>
DIFFERENT; UPDATING
...并且一切都按应有的方式更新。如果我让 crontab 运行该作业,则更新永远不会发生。当我查看 dns_update_script.out 文件时,我看到:
<blank line>
<blank line>
SAME
因此,当脚本由 crontab 运行时,脚本似乎没有 ip_addr 和 old_ip_addr 变量(这当然意味着更新永远不会发生)。知道为什么吗?在 crontab 中使用时,管道是否不起作用(或有一些警告?)?