[SP-pm] forks + daemon + socket
Alexei Znamensky
russoz at gmail.com
Fri Nov 27 03:23:03 PST 2009
Mr Lamb,
no seu código ce tá criando socket tipo UNIX (arquivo), e no erro do log tá
aparecendo socket tipo INET (TCP)... tá certo isso?
[]s,
Russian
2009/11/27 Andre Carneiro <andregarciacarneiro em gmail.com>
> Salve pessoal!
>
>
> Estou tendo um problema utilizando o módulo forks.
>
> Enquanto eu não faço o 'daemonize' no meu daemon, funciona tudo blz. No
> entanto, quando o 'daemonize' acontece, tudo que é executado através de
> forks gera "conexão recusada" no socket.
>
> <code>
> .
> .
> .
> use App::Daemon qw( daemonize );
> use POSIX qw(:signal_h );
> use Getopt::Long;
> use IO::Socket::UNIX;
>
> #DAEMON
> my $SOCKFILE = '/tmp/socktest';
> unlink $SOCKFILE or die $! if -e $SOCKFILE;
> daemonize() if $daemonize == 1;
> my $usock = IO::Socket::UNIX->new( Type => SOCK_STREAM ,
> Local => '/tmp/socktest' ,
> Listen => 1
> ) or die $!;
> my $r = ();
> chmod 0777 , $SOCKFILE;
> my %Process;
>
> while(1){
> if(my ($r) = $usock->accept){
> #c
>
> }else{
> die "\nSOCKET NAO FOI ACEITO!!! $! $@\n";
> }
> }
>
>
> </code>
> #cliente
> .
> .
> .
> use IO::Socket::UNIX;
> use Getopt::Std;
> use Config::General;
> use Data::Dumper;
>
> my $conf_obj = Config::General->new('config/general.conf');
> my %config = $conf_obj->getall();
> my $SOCKETFILE = '/tmp/socktest';#$config{defaults}->{scap_socket};
>
> @ARGV < 1 and die "Parametros invalidos\n";
>
> my $usock = new IO::Socket::UNIX(
> Type => SOCK_STREAM,
> Peer => $SOCKETFILE,
> ) or die "Impossivel abrir Socket: $! $@ em " . $SOCKETFILE;
>
>
>
> my %args;
> getopts("r:s:p:", \%args);
> if($args{r}) {
> print "Executar Spider $args{r} $args{p}\n";
> print $usock "run $args{r} $args{p}" or die $!;
> }
> elsif($args{s}) {
> print "Parar Spider $args{s}\n";
> print $usock "stop $args{s}";
> }
>
>
> O cliente acima instancia uma classe que executa o seguinte trecho de
> código abaixo...
>
>
> <code>
> .
> .
> .
>
> use forks;
> use MooseX::Singleton;
> use Config::General;
> .
> .
> .
>
> foreach my $t(@{$thread}){
> $self->log_spider->write("debug","Thread $i");
> eval{$Threads[$i] =
> threads->create('init_thread',$self,$t,$cf)};
> if($@){
> $self->log_spider->write("error","Erro ao criar Thread
> $i: $@ $!");
> exit(0);
>
> }else {
> $self->stat->dbic($conns->[$i]); #setando a conex?o do
> pool de conex?es.
> $i++;
> }
> }
> foreach my $t (1..$#Threads) {$Threads[$t]->join;}
> .
> .
> .
> .
>
> sub init_thread {
> my ($self,$thread) = @_;
> #várias ações aqui...
> sleep 1;
> }
>
>
> </code>
>
>
>
> Quando a coisa toda é executada, o que ocorre é isso:
>
>
> <trecho do log>
>
>
> [Thu Nov 26 18:57:16 2009] [SCAP2] [debug] Thread 1
> [Thu Nov 26 18:57:17 2009] [SCAP2] [error] Erro ao criar Thread 1:
> (13981): Couldn't connect to query server: IO::Socket::INET: connect:
> Conex�o recusada at /usr/local/lib/perl/5.10.0/forks.pm line 3592
> threads::_croak('Couldn\'t connect to query server:
> IO::Socket::INET: connect:...') called at /usr/local/lib/perl/5.10.0/
> forks.pm line 2113
> threads::_init_thread('HASH(0x98d7f50)', '', undef, undef) called
> at /usr/local/lib/perl/5.10.0/forks.pm line 761
> threads::new('threads', 'init_thread', 'Spider=HASH(0xaa1af10)',
> 'HASH(0xaa6e980)', 'HASH(0xa8fdc30)') called at
> /home/andre/git/scap/lib/Spider.pm line 264
> eval {...} called at /home/andre/git/scap/lib/Spider.pm line 264
> Spider::load_sources('Spider=HASH(0xaa1af10)', 'ARRAY(0xaa6e920)',
> 'HASH(0xa8fdc30)', 'HASH(0xaa6e120)') called at
> /home/andre/git/scap/lib/Spider.pm line 123
> Spider::start('Spider=HASH(0xaa1af10)') called at ./scap2d line 251
> main::run('ARRAY(0xa9e1bb8)', 'Spider=HASH(0xaa1af10)') called at
> ./scap2d line 148
> main::start('Getopt::Long::CallBack=HASH(0xa9f0650)', 1) called at
> /usr/share/perl/5.10/Getopt/Long.pm line 593
> eval {...} called at /usr/share/perl/5.10/Getopt/Long.pm line 592
> Getopt::Long::GetOptionsFromArray('ARRAY(0x8c5c420)', 'start',
> 'CODE(0xa9de550)', 'stop', 'CODE(0xa9e21b8)', 'restart', 'CODE(0x90efa48)',
> 'help', 'CODE(0x90efa48)', ...) called at ./scap2d line 72
> Conex�o recusada
> [Thu Nov 26 18:57:17 2009] [SCAP2] [debug] Thread 2
> [Thu Nov 26 18:57:17 2009] [SCAP2] [debug] Thread 3
> [Thu Nov 26 18:57:17 2009] [SCAP2] [error] Erro ao criar Thread 2:
> (13982): Couldn't connect to query server: IO::Socket::INET: connect:
> Conex�o recusada at /usr/local/lib/perl/5.10.0/forks.pm line 3592
> threads::_croak('Couldn\'t connect to query server:
> IO::Socket::INET: connect:...') called at /usr/local/lib/perl/5.10.0/
> forks.pm line 2113
> threads::_init_thread('HASH(0xad41528)', '', undef, undef) called
> at /usr/local/lib/perl/5.10.0/forks.pm line 761
> threads::new('threads', 'init_thread', 'Spider=HASH(0xaa1af10)',
> 'HASH(0xaa6e910)', 'HASH(0xa8fdc30)') called at
> /home/andre/git/scap/lib/Spider.pm line 264
> eval {...} called at /home/andre/git/scap/lib/Spider.pm line 264
> Spider::load_sources('Spider=HASH(0xaa1af10)', 'ARRAY(0xaa6e920)',
> 'HASH(0xa8fdc30)', 'HASH(0xaa6e120)') called at
> /home/andre/git/scap/lib/Spider.pm line 123
> Spider::start('Spider=HASH(0xaa1af10)') called at ./scap2d line 251
> main::run('ARRAY(0xa9e1bb8)', 'Spider=HASH(0xaa1af10)') called at
> ./scap2d line 148
> main::start('Getopt::Long::CallBack=HASH(0xa9f0650)', 1) called at
> /usr/share/perl/5.10/Getopt/Long.pm line 593
> eval {...} called at /usr/share/perl/5.10/Getopt/Long.pm line 592
> Getopt::Long::GetOptionsFromArray('ARRAY(0x8c5c420)', 'start',
> 'CODE(0xa9de550)', 'stop', 'CODE(0xa9e21b8)', 'restart', 'CODE(0x90efa48)',
> 'help', 'CODE(0x90efa48)', ...) called at ./scap2d line 72
> Conex�o recusada
>
>
>
> </trecho do log>
>
>
>
> Alguém já passou por isso?
>
>
>
> Cheers!
>
>
>
> --
> André Garcia Carneiro
> Analista/Desenvolvedor Perl
>
>
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
--
Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com] [
www.flickr.com/photos/alexeiz]
"Though we live in trying times, we're the ones who have to try"
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20091127/aeb8c9af/attachment-0001.html>
More information about the SaoPaulo-pm
mailing list