WEBサイトの製作、管理、とかの日記ブログです。

<<   2023年07月   >>
SunMonTueWedThuFriSat
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
新着記事
カテゴリ
過去ログ
コメント
検索
シグナル取れたー
昨日からテストしてるFastCGIだが、
シグナル補足できたわ。

どうも、
FCGI::Request
の6番目の引数を設定しない場合は、
シグナルきても無視して待ちつづけるみたいだ。
で、TERMきても終了しないからKILLされてるぽい。

$req=FCGI::Request(\*STDIN,\*STDOUT,\*STDERR,\%ENV,0,FCGI::FAIL_ACCEPT_ON_INTR);
こんな感じにしたらシグナルきた。
$SIG{'TERM'}
だけで良さそうか?

で、まだFastCGIの挙動がよくわかってないから怪しいが、
アクセスカウンタのサンプル

#!/usr/bin/perl

use FCGI;

open(FILE,"count.txt");
$count=<FILE>;
close(FILE);

$SIG{'TERM'}=\&ScriptEnd;

$req=FCGI::Request(\*STDIN,\*STDOUT,\*STDERR,\%ENV,0,FCGI::FAIL_ACCEPT_ON_INTR);

while($req->Accept>=0){
    print "content-type:text/plain\n\n";
    print ++$count;
}

&ScriptEnd;

sub ScriptEnd{
open(FILE,"+>count.txt");
print FILE $count;
close(FILE);
exit;
}


起動時にカウント値の入ったcount.txtを読み込んで$countに入れる。
接続きたらカウント+して表示。
終了シグナルきたら保存して終了。

FastCGIのプロセスを複数起動しないようにすればファイルアクセスせずにメモリで高速アクセスカウンタができる。
サーバー設定で、
FcgidMaxProcessesPerClass 1
てすれば同時起動防げるぽい。
FcgidMaxProcesses
って似たようなのもあるが、こっちは全スクリプトの最大プロセス数ぽい。

FcgidIdleTimeout
を設定すれば、設定時間経過で終了シグナルがくる。(監視間隔があるので実際にはもう少し長くなる)
んだが、
FcgidMinProcessesPerClass 0
ってやって、最小プロセス数を0にしないと、
最小プロセス数は停止せずに残っちゃうんで死んでくれない。
ちなみに、
FcgidIdleTimeoutは初期値が300で設定されてるから、それで良ければ変える必要ない。


あとは、
同時接続きた時にどうなるのか?
ってのがよくわかってないからテストしたいところ。
sleep入れて複数つなげばいいかな?

この記事へのコメント
名前:
URL
コメント:
この記事へのトラックバック :
whblog 1.7