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 で使用すると、パイピングが機能しませんか (または、いくつかの注意事項がありますか?)。