このスクリプトを 15 分ごとに実行して、duckdns.org でセットアップした 4 つの動的ホストの IP を記録します。
DUCKDNS=( "sub1.duckdns.org"
"sub2.duckdns.org"
"sub3.duckdns.org"
"sub4.duckdns.org" )
function resolveIP () {
CURRENT_IP=$(dig +short $1)
echo $CURRENT_IP
}
for HOST in "${DUCKDNS[@]}"
do
IP=$(resolveIP $HOST)
echo -e "$HOST ... $IP"
done
シェルからスクリプトを実行すると、毎回 IP 値を受け取ります。cron 経由でスクリプトを実行すると、スクリプトは散発的に null 値を返します。
この問題は、ホスト (dig ではなく) を実行しているときに気付いた 2(SERVFAIL) エラーに関連していると思います。ホストからの応答は次のとおりです。
host sub1.duckdns.org
sub1.duckdns.org has address 66.66.66.66 (NOTE: This value is correct)
Host sub1.duckdns.org not found: 2(SERVFAIL)
sub1.duckdns.org mail is handled by 50 sub1.duckdns.org.
エラーが返されますが、IP アドレスは正しく、スクリプトはそれを返します。問題なのは、一貫性がない場合があることです。スクリプトは、シェルから実行されるたびに値を抽出し、ほとんどの場合、cron を介して実行されます。
DuckDNS.org でサブドメインを設定した後、賢明な選択ではなかった可能性があることを読みました。おそらく、DuckDNS サービスの問題でしょうか? もしそうなら、他の動的 DNS プロバイダーの推奨事項はありますか?
二重スリット実験の bash バージョンを生きているような気がします。このヌル IP 動作の原因について何か考えはありますか?