[Namazu-win32-users-ja 1034] Re: NMZ.warnlog生成場所変更について

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2007年 8月 30日 (木) 03:20:28 JST


寺西です。

Issei Nishigata wrote:
> 
> ごく自然な振る舞いだと思います。ただ、もし何らかの事情で
> インデックスフォルダが削除されたり、移動されたりした場合に
> 検索できなくなっていることを管理者に通知したいのです。

それなら、インデックスディレクトリの監視をするのが適切ではない
でしょうか?

また、普通は適切なアクセス権がなければ、インデックスディレクトリ
なんて削除したり、移動したりはできないわけですから、それを行える人と
いうのは、検索システムの管理者でしょう。

もしそうでない人がインデックスディレクトリを削除したり、移動したり
できるのであれば、アクセス権の設定、運用に問題があるということに
なります。
 
> その場合にはエラーログ(NMZ.warnlog)が、存在していない、または
> アクセスできないフォルダに生成されるのではなく

ということはできないので仕方なしに STDERR に「Can't open NMZ.warnlog.」
と出しているのです。
普通のWebサーバでは、これがWebサーバのエラーログ等に記録されますが、
IISでは STDERR も STDOUT 同様に扱われるため、Web ブラウザに出力され
ます。

> 別のフォルダに生成され、インデックスフォルダにアクセスできない
> 旨をログとして残したいのです

別の場所に出力する話は既に書いたように、結果的に同じことにしかならない
ので、あまり意味がありません。(線引きをどこにするのかという程度の違い)
何せ出力先がない場合の話ですから。

最初からインデックスディレクトリに適切なアクセス権を付けたり、
インデックスディレクトリが削除されないようにするべきでしょう。
万一、インデックスディレクトリが削除されたなら、それを検知するべき
でしょう。
 
> > おそらく前の環境では複数インデックス化をしていたので、個々の
> > インデックスは、インデックスディレクトリのサブディレクトリに配置
> > されていただけではないかと思います。

もう少し説明すると、複数インデックスの場合、CGI パラメータでidxnameが
指定されておれば、そのインデックスディレクトリに、idxname が指定されて
いない場合は親ディレクトリ、つまり .namazurc の Index で指定した
ディレクトリになります。
ですが
 
> C:\inetpub\Scripts\
> 
> にNMZ.warnlogが生成されていました

プログラムの最初の方でワーニングが発生した場合は、まだ .namazurc の
Index の値に設定されていないため、カレントディレクトリに NMZ.warnlog
を出力します。
例えば、インデックスが64個以上の時とか。メモリが不足したとか。

しかし、その後、インデックスディレクトリがプログラム内部で設定され
ると、その位置に NMZ.warnlog を出力します。
# この振る舞いはあまりよろしくないので、将来は変えたいですが...。

この条件のワーニングが他のサーバでは発生しないか、あるいは Scripts 
ディレクトリの権限とかの問題で、ここにファイルが作られないのでは
ないかと思います。

なお、様々なワーニングを検知するなら複数インデックスの場合は
点在する NMZ.warnlog 全てのファイルをチェックする必要があると
いうことになります。

> 偶然インデックスフォルダが削除されたり、移動されたり
> アクセス権がなくなったりする可能性より、NMZ.warnlogの生成場所の
> アクセス権がなくなる可能性の方が低いと考えています。

本来ですと、インデックスフォルダが削除されたり、移動されたりという
ことは起きませんし、起きないように運用すべきことです。
それが起こる時というのは非常事態であって、日常的に起こるような
仕組みではいけません。
つまり、検索できないことを知りたい管理者の知らないところで、
インデックスフォルダが削除されたり、移動されたりはできないように
運用するべきです。

> > "インデックスフォルダが存在しない"
> > または
> > "インデックスフォルダにアクセス権がない場合"
> > を検知したいということならば、.namazurc を作成する際に確認する
> > ような仕組みを用意すれば良いのではないでしょうか?
> 
> 申し訳ないですが、詳しく教えていただいてもよろしいでしょうか。
> .namazurcはnamazu.cgi.exeを導入する際に一度しか
> 作成しないと思うのですが、何かインデックスフォルダが存在しているか
> 確認することと関係があるのでしょうか。

.namazurc の Index でインデックスディレクトリを指定するわけですから、
指定したディレクトリが存在するか、アクセス権が正しいかは .namazurc
作成時点で確認できます。

もちろん、その後、削除したり、移動したりした場合には無力ですが、
そもそもそんなことは通常させてはいけないことです。
そういう非常事態が起こったのであれば、それはOSのファイル監視機能を
使って検知すれば良いのではないかと思います。

> 解決が無理そうであれば、インデックスフォルダにアクセスできるかどうかの
> 監視アプリを別に用意しようかと考えていますが
> Namazuの方で解決できる方法があればご指導お願いします。

まずは運用の仕方を考え直すべきでしょう。
そして、非常時が起こった時には、OSのファイル監視機能で検知しましょう。
Namazu でどうこうするという次元の話ではないと思います。

なお、以上の話とは別に、NMZ.warnlog がインデックスディレクトリに
保存されることを望まないという単純な理由で、別ディレクトリに保存
したいということであるなら、nmz/search.c の make_fullpathname_index
の nmz_pathcat(base, NMZ.warnlog); を削除して、namaz-cgi.c の main() 
の nmz_set_output_warn_to_file の直前ぐらいで、環境変数またはレジス
トリで指定したパスを設定するようにすれば良いでしょう。
# もちろん改造するには自力でコンパイルできないといけませんが...。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E




Namazu-win32-users-ja メーリングリストの案内