一昨日のサービス開始から、3日が過ぎようしたところでアクセスカウンターがゼロになっている事に気が付いた。
perlの問題と言えばそうなのだが、CentOS 4.8のperl v5.8.5とubuntu 10.04のperl v5.10.1ではtruncate()の振舞いが微妙に違っているみたく、v5.10.1ではファイルの先頭から出力した後でtruncate()するのが正解らしい。
yano@GT110b:/usr/lib/cgi-bin/pngcnt$ diff -cb pngcntrp_203.cgi.old pngcntrp_203.cgi
*** 728,731 ****
! truncate(LOG, 0);
seek(LOG, 0, 0);
print LOG @log;
}
--- 728,732 ----
! # truncate(LOG, 0);
seek(LOG, 0, 0);
print LOG @log;
+ truncate(LOG, tell(LOG));
}
これで11/16~11/18の3日分のアクセス記録をロストした。