起動時のwget
起動時にmydnsのデータを更新するために
/usr/local/etc/rc.d/
へスクリプトを置いて更新しようとしたが、どうもうまくいっていない。
エラーを確認すると
Resolving www.mydns.jp (www.mydns.jp)... failed: hostname nor servname provided, or not known.
wget: unable to resolve host address 'www.mydns.jp'
となっていた。
どうも名前解決が出来ていないようだが、この行のはるか前にunboundは動いている。
ならば確実に動いているはずのプロバイダーDNSを使おうとresolv.confに127.0.0.1は消して
プロバイダーDNSにしてみたが、やはりダメだった。
かと言ってwww.mydns.jpは1つのIPでは無いために直接IPでアクセスも無理だ。
そもそもhttpsなので認証が一致しなくなるし...
hostsに書いてしまうと、更新された時にエラーしてしまうだろうしなぁ~
オプション
/usr/local/bin/wget --dns-timeout=10
を追記してみたが10秒待たずに流れている感じだ。
さらにsleepを使用してスクリプトを一定時間後に実行するようにしてみた。
#!/bin/sh
(
sleep 10
wget・・・
) &
echo "mydns update backeground"
ところがコマンドラインで実行するとちゃんと10秒後に実行してくれるのだが
起動時にはechoの内容はもちろん表示したが、肝心のコマンドは実行してくれないようだ。
全ての起動が終わるとプロセス終了してしまうのか?
と言う事でcronで@rebootと言うのがあり
ブート後に起動するcronに設定してみたが同じ...
名前解決にはもっと時間を取らないとダメなのか?
ならば@rebootで、かつsleepも使ってみるか?
やってみたけどダメだった
なんでこんな時間かけて動かしても名前解決できないんだ?
wgetのオプションでdnsを指定できるのがあったけど
--dns-servers
ところがlibcaresを有効にして再コンパイルが必要らしい。
しかしportsのconfigにオプションが無いので、ソースからコンパイルする必要があるので断念。
調べていたら似たようなソフトでcurlと言うのがあるらしい。
さっそくインストールしてみる。
# cd /usr/ports/ftp/curl
# make config で不要なものは削除
# make install clean
シェルスクリプトで
#!/bin/sh
sleep 60
curl --dns-servers XXX.XXX.XXX.XXX -u ユーザー名:パスワード https://www.mydns.jp/login.html
を実行してやると、今度はうまく行った!
なぜかtun0にIPがもらえるまで30秒かかっていたので、時間稼ぎはどちらにせよ必要だった。
こいつをcronで@rebootにて走らせれば完了。
ようやく解決した時には24時を回っていた。
カウンター
Today
Yesterday
コメントする