ダイナミックDO!の7日毎の更新が2回で止まる。
niftyと同様にPerlでスクリプトを書いた。 携帯電話から手軽にDO!のddns更新ログを確認する。 Diceを使ってダイナミックDO!の自動更新をしていた。ダイナミックDO!は1ヶ月以上更新されないと IDが消去されてします。1ヶ月更新がないとワーニングのメールが届きます。 DiCEを使っていると2回までの更新はしてくれるが、3回目(3週間後)の更新がされない。 原因は不明。FreeBSD+Linuxカーネル+Diceという組み合わせに無理があるのか? 面倒なのでniftyと同じようにPerlでスクリプトを書いてcrontabで実行するようにした。 ついでに更新ログを携帯電話から見られるようにした。nifty用に作ったPerlのプログラムを修正。 携帯電話からログを読み出すcgiもniftyのものをアレンジした。 その記録を残すこととした。 iモードのトップページは /i/index.html その次に呼び出されるページは /i/ddns-ddo-update-i.html さらにこれから呼び出されるcgiは /usr/local/apache2/cgi-bin/tail_ddns_ddo_update-i-120708.cgi 携帯電話から見ることを考え読み出す非更新ログは3行分としました。 cgiファイルは以下の通り。 #!/usr/bin/perl -w # -w ワーニングを出す # /usr/local/bin/ddns4nifty/ddo/update.logを携帯電話iモードで出力する # /usr/local/apache2/cgi-bin/tail_ddns_ddo_update-i-120708.cgi mod 755 # 2009/02/10 ---> nifty用に修正 # 2012/07/08 ダイナミックDO!用に修正完了 # program # use strict; # 宣言した変数以外を使えなくする $| = 1; # ゼロ以外が代入されると出力をバッファリングしなくなる。 my $sec; my $min; my $hour; my $mday; my $mon; my $year; my $wday; my $yday; my $isdst; my $tt; my $null=""; my $line=""; # 読み込み書き込みファイルオープン # 読み取り 書き込み 追加 新規作成 上書き # < filename ○ × × × × # > filename × ○ × ○ ○ # >> filename × ○ ○ ○ × # +< filename ○ ○ × × × # +> filename ○ ○ × ○ ○ # +>> filename ○ ○ ○ ○ × # ======================== # ファイルによる呼び出し限定の場合 my $okfile1= "https://192.168.24.111/cgi-call/ddns-ddo-update-i.html"; # 呼び出しを許可するファイル名(localhost) my $okfile2= "https://www.nic.atnifty.com/cgi-call/ddns-ddo-update-i.html"; # 呼び出しを許可するファイル名(ddns nifty) my $okfile3= "https://nic825.ddo.jp/cgi-call/ddns-ddo-update-i.html"; # 呼び出しを許可するファイル名(ddns ddo.jp) # ############### ここからhtml出力へ htmlへ出力する場合この下の行が出力の最初になければならない print "Content-type: text/html\n\n"; # iモードから呼び出すためチェックを外す(2011/10/15) # &from_check_f; # 呼び出し元チェック用のサブルーチン呼び出し #print "system \n"; #system 'tail /usr/local/bin/ddns4nifty/no_update.log'; # ------ ファイルを1行ずつ読み込み、EOFで終了 ---------------- # ------ open分のファイル名の後ろに"|"を付けることでファイル名をコマンドと見なしその出力をファイルハンドラに入力できる ---- print "open /ddo/update.log<br>\n"; # open( IN, "tail -30 /usr/local/bin/ddns4nifty/no_update.log |"); open( IN, "tail -3 /usr/local/bin/ddns4nifty/ddo/update.log |"); while ( $line = <IN>) { print $line,"<br>"; } close(IN); exit; # --------- 呼び出し元チェック用のサブルーチン ----------------------- sub from_check_f { if($ENV{'HTTP_REFERER'} ne $okfile1){ if($ENV{'HTTP_REFERER'} ne $okfile2){ if($ENV{'HTTP_REFERER'} ne $okfile3){ print "不正なCGI呼び出しです。"; exit; } } } # ---------- 念のためPOST限定 --------- # if( $ENV{'REQUEST_METHOD'} eq "GET" ) { # print "不正な呼び出しです(GET)。"; # exit; # } } # --------- チェック用のサブルーチン END -------------------
Perlのプログラム(2012/07/08)です Perlのプログラム IPアドレスが変わったとき更新がうまくいかなかったのを修正(2012/08/29) Perlのプログラム 引数を除いた形(広域変数)(2012/08/31) Perlのプログラム IPアドレスが変わったとき更新がうまくいかなかったのを修正(2012/11/09) |