🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
5 messages
5 total messages Started by Cezar Tue, 30 Jun 2009 14:05
signals (lighttpd + mod_fastcgi)
#51479
Author: Cezar
Date: Tue, 30 Jun 2009 14:05
73 lines
2874 bytes
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ć) :)
Re: signals (lighttpd + mod_fastcgi)
#51480
Author: Marcin Gryszkalis
Date: Wed, 01 Jul 2009 04:47
26 lines
1405 bytes
Cezar wrote:
> Nawet po zabiciu/zamknięciu lighttpd, procesy 'test.pl' zostają dalej
> uruchomione i jedyne na co reagują to SIGKILL.

> sub sig_handler {
>     $exit_requested = 1;
>     exit(0) if !$handling_request;
> }

> while ($handling_request = ($request->Accept() >= 0)) {
>     &do_request;
>     $handling_request = 0;
>     last if $exit_requested;
> }

może na przykład wiszą sobie w jakimś miejscu gdzie masz ustawione
handling_request na 1, np. tutaj:

>     $request->Finish();

ale strzelam zupełnie w ciemno :)
pozdrawiam
-- 
Marcin Gryszkalis, PGP 0x9F183FA3
jabber jid:mg@fork.pl, gg:2532994
http://the.fork.pl
Re: signals (lighttpd + mod_fastcgi)
#51482
Author: Cezar
Date: Wed, 01 Jul 2009 08:45
19 lines
1616 bytes
> może na przykład wiszą sobie w jakimś miejscu gdzie masz ustawione
> handling_request na 1, np. tutaj:
>
>>     $request->Finish();
>
> ale strzelam zupełnie w ciemno :)
> pozdrawiam

nie,nie ... to nie to. Sygnaly nie są wcale odbierane. Nawet wrzuciłem 
wypluwanie czegoś do sysloga w 'sig_handler' i absolutnie nic nie zapisuje.
Dodam jeszcze ze jak dodam w konfiguracji lighttpd:
"kill-signal"   => 9

czyli SIGKILL, to procesy zostają poprawnie zabite.... ale nie o to mi do 
końca chodzi. Skrypty nawiązują połączenia, które potrzebuje 'gracefully' 
zamknąć.

c.
Re: signals (lighttpd + mod_fastcgi)
#51481
Author: Adam Osuchowski
Date: Wed, 08 Jul 2009 08:43
5 lines
955 bytes
Cezar wrote:
> Czy ktoś ma pomysł co robię źle lub może mi wytłumaczyć dlaczego tak jest? 
> (i musi tak być) :)

Poczytaj rozdział ,,Deferred Signals (Safe Signals)'' w dokumentacji perlipc.
Re: signals (lighttpd + mod_fastcgi)
#51483
Author: Cezar
Date: Wed, 08 Jul 2009 17:38
14 lines
1360 bytes
"Adam Osuchowski" <someone@somewhere.com> wrote in message 
news:20090708084302.6b8b4567@polsl.pl...
> Cezar wrote:
>> Czy ktoś ma pomysł co robię źle lub może mi wytłumaczyć dlaczego tak 
>> jest?
>> (i musi tak być) :)
>
> Poczytaj rozdział ,,Deferred Signals (Safe Signals)'' w dokumentacji 
> perlipc.

dzieki, pomoglo.

c.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads