signals (lighttpd + mod fastcgi)
Von: Cezar (cezar91@beztlen.pl) [Profil]
Datum: 30.06.2009 16:05
Message-ID: <h2d631$o01$1@inews.gazeta.pl>
Newsgroup: pl.comp.lang.perl
Datum: 30.06.2009 16:05
Message-ID: <h2d631$o01$1@inews.gazeta.pl>
Newsgroup: pl.comp.lang.perl
Witam,
Jedna z uslug, któr± potrzebuje zaimplementowaæ musi
przyj±æ kilkaset
zapytañ na sekunde.
Wybór pad³ na fastcgi i lighttpd .. bo dobrze o nich pisz± :)
Niestety mam pewien problem z przechwytywanim signals ... albo po prostu
czego¶ nie rozumiem.
Robie tak jak w przyk³adach:
fastcgi.server = (
".pl" =>
((
"fastcgi.debug" => 50000,
"bin-path" => "/var/www/http/test.pl",
"socket" => "/tmp/lighttpd.perl.fcgi",
"check-local" => "disable",
"min-procs" => 1,
"max-procs" => 5,
"idle-timeout" => 20
))
)
Przepisa³em juz swoj wczesniejszy skrypt, który dzia³a³ na
POE::Component::Server::HTTP na CGI:Fast czy tez FCGI i wyszystko dzia³a
piêknie, jak oczekiwa³em je¶li chodzi o wydajno¶æ ... ale
niestety w zaden sposob nie przechytuje ani SIGTERM ani SIGUSR1.
Nawet po zabiciu/zamkniêciu lighttpd, procesy 'test.pl' zostaj± dalej
uruchomione i jedyne na co reaguj± to SIGKILL.
Ten sam efekt jest gdy uzywam przykladowego skryptu ze strony
http://www.fastcgi.com/docs/faq.html#PerlSignals :
#!/usr/local/bin/perl -w
use FCGI;
use strict;
my $count = 0;
my $handling_request = 0;
my $exit_requested = 0;
my $request = FCGI::Request();
sub sig_handler {
$exit_requested = 1;
exit(0) if !$handling_request;
}
$SIG{USR1} = \&sig_handler;
$SIG{TERM} = \&sig_handler;
$SIG{PIPE} = 'IGNORE';
while ($handling_request = ($request->Accept() >= 0)) {
&do_request;
$handling_request = 0;
last if $exit_requested;
}
$request->Finish();
exit(0);
sub do_request() {
print("Content-type: text/html\r\n\r\n", ++$count);
$request->Finish();
}
Czy kto¶ ma pomys³ co robiê ¼le lub mo¿e mi
wyt³umaczyæ dlaczego tak jest?
(i musi tak byæ) :)
[ Auf dieses Posting antworten ]Antworten
- Marcin Gryszkalis (01.07.2009 06:47)
- Cezar (01.07.2009 10:45)
- ,, (08.07.2009 10:43)
- Cezar (08.07.2009 19:38)
