Если взять всем хорошо известный вариант http://habrahabr.ru/blogs/perl/53540/и заменить tcp Код | my $socket = FCGI:penSocket(":9000", 5); |
на unixsocket Код | my $socket = FCGI:penSocket($filesock, 5); |
а Код | while($request->Accept() >= 0) { |
на Код | while (my $cgi = CGI::Fast->new()) { |
точно как в мане то начнется бурная жизнь воркеров Код | FastCGI: server (pid 54999): initialized FastCGI: manager (pid 54970): server (pid 54998) exited with status 0 FastCGI: manager (pid 54970): server (pid 55000) started FastCGI: server (pid 55000): initialized FastCGI: manager (pid 54970): server (pid 54995) exited with status 0 FastCGI: manager (pid 54970): server (pid 55001) started FastCGI: manager (pid 54970): server (pid 54997) exited with status 0 FastCGI: server (pid 55001): initialized FastCGI: server (pid 55002): initialized FastCGI: manager (pid 54970): server (pid 55002) started FastCGI: manager (pid 54970): server (pid 55000) exited with status 0 FastCGI: manager (pid 54970): server (pid 55003) started FastCGI: manager (pid 54970): server (pid 55002) exited with status 0 FastCGI: manager (pid 54970): server (pid 55004) started FastCGI: server (pid 55003): initialized FastCGI: manager (pid 54970): server (pid 55001) exited with status 0 FastCGI: server (pid 55005): initialized FastCGI: manager (pid 54970): server (pid 55005) started FastCGI: server (pid 55004): initialized FastCGI: manager (pid 54970): server (pid 54999) exited with status 0 FastCGI: manager (pid 54970): server (pid 55006) started |
Видно где то баг. По поводу класса Код | use POE::Component::FastCGI; |
http://www.lexa.ru/nginx-ru/msg04244.htmlВисит и не закрывает соединение. Все попытки Код | $request->header( Connection => 'close' ); |
Неприводят к результату. По поводу класса Неудалось скрестить с unixsocket. Клас Код | require POE::Component::Server::HTTP; |
Использовать нехочу потому что по tcp Какие есть еще варианты? ЗЫ Пока сделал так Код | #!/usr/local/bin/perl -w use strict; use warnings; use Data::Dumper; use CGI; ########################################################## use IO::All; my $log_file="traf.log"; my $pid_file="/var/run/traf.pid"; my $filesock="/mnt/md0/test.sock"; my $verbose="1"; my $DEBUG=1; ################################################################################ use POSIX qw(strftime); use English; my $now_time = strftime "%a %b %e %H:%M:%S %Y", localtime; if ($DEBUG) { addlog("\n$now_time [$PID]:Start daemons\n"); } my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time()); $mon++;$year += 1900;my $date=sprintf ("%4d%02d%02d%02d",$year,,$mon,$mday,$hour); if ($DEBUG) { addlog("$now_time [$PID]:Prints date $date\n"); } ################################################################################ use FCGI; use POSIX; use FCGI::ProcManager qw(pm_manage pm_pre_dispatch pm_post_dispatch pm_change_process_name pm_write_pid_file); fork_proc() && exit 0; addlog("$now_time [$PID]:Demonize.\n"); POSIX::setsid() or die "Can't set sid: $!"; chdir '/' or die "Can't chdir: $!"; pm_write_pid_file($pid_file); #очень важно сделать это здесь а не ниже ! my $socket = FCGI::OpenSocket($filesock, 5); system("chmod 777 $filesock"); POSIX::setuid(65534) or die "Can't set uid: $!"; my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket); pm_manage(n_processes => 2); reopen_std(); my $count = 1; while($request->Accept() >= 0) { pm_pre_dispatch(); &process_request($request); pm_post_dispatch(); }; ############################################################################### sub fork_proc { my $pid;
FORK: { if (defined($pid = fork)) { return $pid; } elsif ($! =~ /No more process/) { sleep 5; redo FORK; } else { die "Can't fork: $!"; }; }; }; ############################################################################### sub reopen_std { open(STDIN, "+>/dev/null") or die "Can't open STDIN: $!"; open(STDOUT, "+>&STDIN") or die "Can't open STDOUT: $!"; open(STDERR, "+>&STDIN") or die "Can't open STDERR: $!"; }; ############################################################################### sub process_request { my ($request)=@_; my $env = $request->GetEnvironment(); my ($in, $out, $err) = $request->GetHandles(); my $q = new CGI($in); addlog("$now_time [$PID]:$env->{DOCUMENT_ROOT}$env->{REQUEST_URI}\n"); print "Content-Type: text/html\r\n\r\n"; print "ok"; } ############################################################################### sub shutdown { FCGI::CloseSocket($socket);#unlink ($pid_file) or die "Can't unlink $pid_file: $!"; exit 0; } use sigtrap 'handler', \&shutdown, 'normal-signals'; ############################################################################### sub addlog { my ($log_message) = @_; $log_message >> io($log_file); } |
Обсуждение начато здесь http://forum.sysfaq.ru/index.php?showtopic...mp;#entry383973
|