CGIの原因不明なエラー

社内で使用しているCGIに、昨日からエラー報告が相次ぐようになった。
掲示板の変種のようなスクリプトなのだが、書き込み時にエラーが出て投稿完了できないという。
すぐ思い付く原因は

  1. CGIにバグがある
  2. ログファイルのアクセス権に問題がある
  3. サーバの動作不良

なのだが、手元の端末からテスト投稿すると普通に処理される。上記のいずれの原因であっても、テスト時にエラーが発生しなければおかしい筈だ。ということは単純なCGI周りの動作に起因するエラーではないと考えられる。
そうなるとブラウザ環境の違いによるものだろうか。しかし社内のPC環境は基本的にほぼ統一されており、Windowsのアップデートを実行していないなどの理由による多少の差異はあるにせよ、動作上の差を引き起こすほどの違いがあるとは考え難い。そもそも非常にオーソドクスなformからのsubmitによるPOSTメソッドでの送信しか扱っておらず、別ブラウザだろうがバージョン違いだろうが動作がおかしくなる理由もないのだが。
ところでこのスクリプト、月単位でログファイルを切り替える仕様になっている。今月からエラー報告があるということは、今月になって新たに用意されたログファイルが原因であるようにも思われる。そこでログファイルを取り出して過去のものと比較してみたが、特段の差異は発見できなかった。
また先月初頭にサーバの入れ替えに伴いスクリプトの実行環境を移植したので、それに絡むものかとも考えたが、それならば先月時点でエラーが発生している筈だ。今月になって急に、ということは問題の種はそこにはないように思われる。
また、エラーは全員に発生しているわけではない。現に私の周囲の端末何台かで試したがいずれも正常に投稿を受け付けたし、また他の社員が投稿したものでも反映が確認されているものはある。
となると、残るはキャッシュファイルなどによる環境固有の問題ということになりそうなのだが、そもそも日付単位でユニークなURLを振っているので、過去の日付のキャッシュが原因で今日の利用にエラーを生じるとは考え難い。
また投稿時の人名などに問題があって完了できなかった可能性も考えて入力内容を送ってもらいこちらで入力確認してみたが、これは問題なく通っている。
そもそも投稿反映までには入力項目のチェック、ログ読み込み、データの整形、重複投稿チェック、データ書き込みの5段階の処理があり、それぞれにエラーメッセージを変えることで問題が起きた箇所を特定できるようにしてある。それによると、いずれの場合もエラー発生箇所は最後の書き込み処理であった。つまり入力内容や環境の問題ではなく単純に処理を完了できていないということなのだが、何故それが環境依存で発生してしまうのだろうか。
一体何が原因なのか、それを特定できないことには対処のしようもない。


エラーが出るという端末をリモートして確認。同じ端末でも前月までのログではエラーを生じなかった。また次月分データを、当月のものをコピーし作成したところやはりエラーが発生した。ということは日付に依拠する内部的なエラーでもなく(まあ「ある時期以降すべて」の問題である可能性は排除されていないが)ログに固有の問題であるように思われる……が、いずれにせよ端末の環境依存という謎は消えない。内部的なエラーならば誰の操作でも等しく発生する筈なのだが……
予想と異なり、前月以前の「安全な」データをコピーし次月分としてみてもエラーは発生した。つまりデータの問題ではなく日付の問題ということだ。なんにせよ、発生しない人がいるという謎は解決されていない。
実験の結果、ネットワーク構造でも端末個々の環境差でもなく、ネットワークへのログインアカウントで発症が決まることまでは確認。がそもそもアカウントなんて見もしないCGIで、どうしてそれを条件に動作が違うのかという謎は消えない。