
作成したZopeのシャットダウンがうまく行かない。
調べた挙げ句、/etc/init.d/functions内部のkillprocファンクションが
おかしい事が判る。Mandrake 8.1では、pidofprocファンクションで、
シャットダウンしたいサーバプロセスのPIDを探しに行くが、
Mandrake 9.0ではpidofprocファンクションは使わず、なぜかpidofproc
ファンクションとよく似た処理をわざわざ別にコードを書いてやっている。
原因はよく解らないが、とりあえず/etc/init.d/functionsの、
killproc内部でpidofprocを呼び出すように下記コードを追加した。
if [ -z "$pid" ]; then
pid=`pidofproc $base`
fi
****
ようやく原因わかる。
/etc/init.d/zopeは内部でpidofprocファンクションを再定義していた。
これはzserverの動いているプロセスID(PID)を適切に処理するため。
で、Mandrake 8.1ではkillprocファンクションが内部でpidofprocを呼び
出しているため、再定義されたzopeスクリプト内のpidofprocが呼ばれる
というわけ。ところが、Mandrake9.0ではそうなっていない。
そして、内部でdaemon zserverとして、処理プロセスを起動するが、
zserverとして動的に呼ばれるz2.pyは通常のサーバプロセスのように
/var/run以下にpidファイルを作らず、/var/zope/var以下にZ2.pidという
ファイルをつくって、そこに起動したzserverのpidを格納する。
故にpidofprocを独自に作成する必要があった。
なお、zwatchdogとして呼ばれる場合は、/var/run/zwatchdog.pidに
PIDを格納する。
これをシステム側から見てキレイに処理するとしたら、/var/run/zserver.pid
というファイルをつくって、そこにプロセスIDを記録するのがいいのだが
このZ2.pidはZope自身が監視しているので、迂闊に変更できない。
結局、キタナイ手だが、killprocファンクションをごっそり/etc/init.d/zope
に持ってくるしかない。