アクセスログCGI大幅修正

過去に何度か、このブログを利用してテストをしていた、アクセスログを取得するためのCGIを大幅に修正しました。
過去のテスト記事:
2008/4 2005/6 2005/4


今回の修正では、処理の流れを大幅に変更しました。
1.ログデータをファイルに書き込む時に、ファイルのロックにより待ちが発生する可能性があるため、CGIは直ちに終了し、ログデータの作成と書き込みは、バックグラウンドで処理できる様にしました。このために、perlのforkシステムコールで、子プロセスを生成する方法を採用しました。
※forkについて参考にしたページ:
  http://www.stackasterisk.jp/tech/program/perl04_02.jsp
2.ログデータを書き込むファイルには、追記で書き込むことになりますので、排他制御が必要です。以前のバージョンではflockを利用しており、今回もflockで問題なさそうでしたが、可搬性を持たせるため、mkdirとsymlinkを使った排他制御をテストしてみました。今回は、mkdirを採用します。
※perlでの排他制御について参考にしたページ:
  http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
排他制御で気になる点があります。ロックされていたら1秒後にリトライするのですが、待っている間に後から来たログデータが書き込まれてしまう可能性があります。そうなると、ログデータの前後関係が狂ってしまいそうです。どうせ後でソートするので、Time::HiResモジュールでも使って1秒以下の時刻をログデータに追加した方が良いかもしれません。