Windowsサーバのsendmail.exe
職場のWebサーバで運用しているFSWikiの参照の一部が、FirefoxでクリックしたらInternalServerErrorになるという昨日の一件。
参照の一部だけ、さらにFirefoxだけで発生するというのが怪しいが、このサーバってば、リモートでGUIができるという理由でWindowsを走らせているくせに、Web関連ではApache for Win32とか、1行目のパス指定が#!/usr/bin/perlになっているperlスクリプトとか、まあUnixyなコードが入っている。おかげで何かあった時の心当たりが広すぎるのが困りものである。
個人的にはむしろリモートコンソール(SSH)の方が好きなのだが、私の次が引き継いだ時に困るとおっしゃる。トラブルの原因の特定に手間がかかるとか、それ以前にわざわざトラブルが発生しやすい状況を作るのを思えば、いくらGUIでわかりやすくても意味がないと思うけどねえ。
それはともかく、apacheのエラーログ見たら、ヘッダの内容がおかしいと出た。Bad header= =?ISO-2022-JP?B?Zg==?="
だと。どういう事情かはよくわからないが、ファイル名を渡す処理のどこかでMIME64に変換しようとして失敗しているらしい。試しにWikiについてきたJcode.pmの該当箇所で、変換を通さずに(EUC-JPの)ファイル名をそのまま返すように細工したら直った。
本来なら、なぜFirefoxの時だけここを通って失敗するのかを調べなければならないところだが、サイト内部でメールを出したりしない限り、MIME64への変換は行われない、とみなして(本当かどうかは知らん)しばらく様子を見る。あとFSWikiは他のホストでも使われているが、それぞれのlibディレクトリの下のJcode.pmを使うはずなので、この意味でも問題ないだろう。というか他のFSWikiはどうして平気なのか!? ひと世代旧いから?
と思ったら、翌日Webサーバからメールが来ない。サードパーティのsendmail.exeでエラーログを私宛に出すスケジュール、ただしエラーログの出ない日はメールを出さない仕掛けにはしているが、昨日あれだけトラブったのでさすがに気付いて、リモートデスクトップを開いたところ、おなじみ「ご迷惑をおかけして申し訳ありません」のダイアログが出てsendmail.exeが停まっている。メールだけにMIME64関連をいじったのを疑ったが、一時的に元に戻しても改善なし。よく考えたら、C:\Perl\binに間借りしているsendmail.exeが、一介の!?ホストのJcode.pmなんか見に行くはずがねえや。
ということで、昨日やったことを思い出しながらテストしたところ、どうやら環境変数PERLLIBにパスをセットしたのが直接の原因らしい。真の原因はよくわからんが、とにかく削除したら回復した。パス自体は間違いなかったはずだが、パス区切りに"/"を使ったのがまずかったのか、あるいはそもそもWindowsではセットしたらいかんかったのかはよくわからない。まあ結果的には、昨日のエラーの心当たりがありすぎて色々無用無益な手を打ったせいということになる。Windows自体が悪いとは言わんが、Unixyなツールが絡むと、恐ろしくメンテナンスコストのかかるサーバになりうるのだ。
コメントフィード
トラックバックURL: http://iwashi06.dai-mine3.net/2011/01/29/windows%e3%82%b5%e3%83%bc%e3%83%90%e3%81%aesendmail-exe/trackback/