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

<<   2023年07月   >>
SunMonTueWedThuFriSat
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
新着記事
カテゴリ
過去ログ
コメント
検索
FastCGIでプロセス終了時処理したいな思って・・・
#!/usr/bin/perl
$SIG{'TERM'}=sub{exit;};

use FCGI;
my $FCGI=FCGI::Request(\*STDIN,\*STDOUT,\*STDERR,\%ENV,0,FCGI::FAIL_ACCEPT_ON_INTR);
while($FCGI->Accept>=0){
print "content-type:text/plain\n\n$$";
sleep(10);
$FCGI->Finish;
exit;
}

END{
open(FILE,"+>>test.txt");
print FILE "$$\n";
close(FILE);
}

こんな感じでテストしてみた。

まず、sleep(10)で10秒待って、処理中にもう一個接続。
って感じだが、
同じアドレスからの接続だとapacheの方で待機しちゃう?
とにかく、別アドレスじゃないと別プロセスにつながらないくさい。
別アドレスからの同時接続ならDastCGIプロセスは2個になった。
(当然、FastCGIは複数プロセス実行に設定してある。)

あと、
sleep(10);
$FCGI->Finish;
だが、
逆に
$FCGI->Finish;
sleep(10);
の場合も、別アドレスからの接続であっても待機されるぽくて、2個目のプロセスは起動しない。

で、
exit;
で終了だが、
ENDブロックは両方のプロセスで実行された。
ENDブロック使うだけでプロセス終了時処理できそうだね。

FastCGIのアクセスログ取りたいと思うんだが、
データベースに記録する感じだと、
アクセス毎にデータベースアクセスはちとやだ。
メモリにログ溜め込んで一定時間でまとめて記録。
TERMされたらその時に記録。
って感じのことしようと思う。

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