起動時のwget

| | コメント(0)

起動時に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時を回っていた。

コメントする

このブログ記事について

このページは、miyaが2020年5月21日 20:23に書いたブログ記事です。

ひとつ前のブログ記事は「SSH」です。

次のブログ記事は「mysqlのデータをEUCからUTF-8へ変更する」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2020年5月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

時計

カウンター

2007.09.30(Sun)

Today    
Yesterday 

Powered by Movable Type 7.3