From russoz em gmail.com Mon Feb 1 02:17:04 2010 From: russoz em gmail.com (Alexei Znamensky) Date: Mon, 1 Feb 2010 08:17:04 -0200 Subject: [Cascavel-pm] MD5 -> Fazer o Reverse In-Reply-To: <179354401001311752o5da84641nb164e861661c6784@mail.gmail.com> References: <0DAD881C986745FA8215DF1E0FECD9C0@pcricardo> <23f46d7f1001310353i6afb5851heeeadb0f657ca21a@mail.gmail.com> <179354401001311752o5da84641nb164e861661c6784@mail.gmail.com> Message-ID: <23f46d7f1002010217p5b49b49cr65179acc4453ccd9@mail.gmail.com> Blabos, 2010/1/31 Blabos de Blebe [...] > > b) Fale do problema que você está tentando resolver. > Na verdade ele já falou. Veja: [...] > > > > Estas senhas ( hash criptografado) deveram ser tratadas como texto puro > > para comparação ? Haveria uma maneira melhor de fazer isto ? Qual a > vantagem > > de criptografar, a nao ser manter ilegivel no banco. > Ricardo, use as palavras corretas para as coisas: hash não é criptografia, então quando você diz "hash criptografado", os trolls da lista ficam nervosos e com vontade de bater em você. As respostas são, na ordem: Sim, como texto puro. Não que eu saiba. (vantagem de fazer hash, não criptografar): nenhuma, mas essa vantagem é muito importante. > > > Hoje quando faço uma aplicação, faço assim, mas queria melhorar > > > > 1 -Usuário se loga > > 2 - Recebe user e senha > > 3 - Grava cookie com user e senha no browser para expirar ao de > > desconectar ou fechar o navegador.. > > (se nao grava cookie, não loga e retorna direto, se javascript > > desabilitado retorna direto, o que grava o cookie é a funcao cookie do > CGI) > > (quando gravo o cookie, gravo nele uma idetificação gerada > > aleatoriamente, pelo perl usando data,hora,ip e a função rand e mantenho > > este dado em uma tabela temporaria para verificar se o > cookie > > nao foi "plantado") > Por favor me diga que eu li errado e que você não está transmitindo a senha do usuário, em cleartext, de volta, pelo cookie. > > > > 4 - Redireciona para pagina de verificação > > 5 - Recupera cookie com user e senha e grava em uma variavel > > 6 - Recupera identificação. > > 7 - Seleciona user e senha no banco > > ai > > 8 - se senha_cookie e user_cookie == user_selecionado e > senha_selecionado > > { > > se (identificação_cookie==identificação_temporaria) { > > logado > > } > > senao { > > retorna > > } > > > > O usuário só interage no item 1 > > > > Pergunto isto porque vejo muito sobre criptografia / session e cookie. E > > queria a opnião de pessoas mais experientes sobre o assunto. estou > fazendo > > correto, da para melhorar.. com certeza sempre tem uma forma diferente de > > ser fazer a mesma coisa em perl. e particularment eu tentei usar session, > e > > apanhei um pouco. :-) > A melhor forma é fazer assim: quando neguinho se loga, você pega essas informações tipo user, ip, data, hora (Não é preciso, nem recomendável colocar a senha aqui), e gera um hash desse bolôlô todo. Esse hash, junto com essas informações, você guarda, temporariamente, numa tabela de dados, coloca um timestamp e a cada minuto você percorre a tabela e remove os caras que ficaram velhos demais (tipo, mais que 30 minutos, ou mais que 5, dependendo de quanto é o timeout de sessão da sua aplicação). Esse hash você manda no cookie de volta. Toda vez que o neguinho mandar requisição, se ele tiver o cookie com o hash, você faz o teste pra ver se é um hash que existe de fato na sua tabela. Se não existir, é fake - chuta o cara até cuspir sangue no chão. Se existir, você atualiza o timestamp na tabela e segue a vida. []s, -- 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: From ricardostock em bol.com.br Mon Feb 1 04:21:12 2010 From: ricardostock em bol.com.br (Ricardo Stock) Date: Mon, 1 Feb 2010 09:21:12 -0300 Subject: [Cascavel-pm] MD5 -> Fazer o Reverse References: <0DAD881C986745FA8215DF1E0FECD9C0@pcricardo><23f46d7f1001310353i6afb5851heeeadb0f657ca21a@mail.gmail.com> <179354401001311752o5da84641nb164e861661c6784@mail.gmail.com> <23f46d7f1002010217p5b49b49cr65179acc4453ccd9@mail.gmail.com> Message-ID: <24D19474637F4B33BDFD179DEE1613AD@pcricardo> Não gravo o cookie com texto puro estava usando a função crypt do perl, mas a comparação era feita texto puro. e a comparação era feita a cada interação do usuário com a base. Não utilizava tempo limite, vou pensar no assunto. querai saber se tem como trabalhar com a senha criptografada, sem comparação em texto puro, mas o russo me deu uma idea melhor. Não estou querendo resolver nada, estou querendo apenas aprender mais e melhorar minha aplicação. Mesmo assim Russo, obrigado pela ajuda... Bablos, embora já tivesse lido os links no pt-wiki, mesmo assim obrigado Todo troll um dia foi um nob. Ricardo Stock ricardostock em bol.com.br -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From russoz em gmail.com Mon Feb 1 03:26:41 2010 From: russoz em gmail.com (Alexei Znamensky) Date: Mon, 1 Feb 2010 09:26:41 -0200 Subject: [Cascavel-pm] MD5 -> Fazer o Reverse In-Reply-To: <24D19474637F4B33BDFD179DEE1613AD@pcricardo> References: <0DAD881C986745FA8215DF1E0FECD9C0@pcricardo> <23f46d7f1001310353i6afb5851heeeadb0f657ca21a@mail.gmail.com> <179354401001311752o5da84641nb164e861661c6784@mail.gmail.com> <23f46d7f1002010217p5b49b49cr65179acc4453ccd9@mail.gmail.com> <24D19474637F4B33BDFD179DEE1613AD@pcricardo> Message-ID: <23f46d7f1002010326o63742829ub43e1661d976a0c5@mail.gmail.com> Ricardo, de qualquer maneira: 1) Se expresse mais claramente 2) Não mande a senha do usuário, mesmo que codificada usando crypt(), ou MD5, de volta pela rede. A senha é algo que deve transitar apenas UMA única vez, no momento da autenticação. Toda e qualquer outra viagem que essa informação fizer, em qualquer forma, é uma chance a mais de alguém capturar essa informação, e depois ter todo o tempo do mundo para fazer uma cripto-análise, ou rodar ferramentas de força-bruta que irão, mais cedo ou mais tarde, quebrar a senha do seu usuário. A propósito, o Blabos não foi um troll, ele foi no máximo um orc, e dos bem bonzinhos. Os trolls não foram ainda despertados, mas você irá vê-los em ação, não se preocupe quanto a isso. E o fato de que todo mundo foi noob um dia não justifica que os noobs não façam seus deveres de casa. Cheers, Russian 2010/2/1 Ricardo Stock > Não gravo o cookie com texto puro estava usando a função crypt do perl, > mas a comparação era feita texto puro. e a comparação era feita a cada > interação do usuário com a base. Não utilizava tempo limite, vou pensar no > assunto. > > querai saber se tem como trabalhar com a senha criptografada, sem > comparação em texto puro, mas o russo me deu uma idea melhor. > > > Não estou querendo resolver nada, estou querendo apenas aprender mais e > melhorar minha aplicação. > > Mesmo assim > > Russo, obrigado pela ajuda... > Bablos, embora já tivesse lido os links no pt-wiki, mesmo assim obrigado > > > > Todo troll um dia foi um nob. > > > > Ricardo Stock > ricardostock em bol.com.br > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-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: From edencardim em gmail.com Mon Feb 1 05:25:33 2010 From: edencardim em gmail.com (Eden Cardim) Date: Mon, 01 Feb 2010 10:25:33 -0300 Subject: [Cascavel-pm] MD5 -> Fazer o Reverse In-Reply-To: <24D19474637F4B33BDFD179DEE1613AD@pcricardo> (Ricardo Stock's message of "Mon, 1 Feb 2010 09:21:12 -0300") References: <0DAD881C986745FA8215DF1E0FECD9C0@pcricardo> <23f46d7f1001310353i6afb5851heeeadb0f657ca21a@mail.gmail.com> <179354401001311752o5da84641nb164e861661c6784@mail.gmail.com> <23f46d7f1002010217p5b49b49cr65179acc4453ccd9@mail.gmail.com> <24D19474637F4B33BDFD179DEE1613AD@pcricardo> Message-ID: <87y6jdccky.fsf@janis.localdomain> >>>>> "Ricardo" == Ricardo Stock writes: Ricardo> Não gravo o cookie com texto puro estava usando a função Ricardo> crypt do perl, mas a comparação era feita texto puro. e a Ricardo> comparação era feita a cada interação do usuário com a Ricardo> base. Não utilizava tempo limite, vou pensar no assunto. Ricardo> querai saber se tem como trabalhar com a senha Ricardo> criptografada, sem comparação em texto puro, mas o russo me Ricardo> deu uma idea melhor. A forma típica de fazer um desafio de senha "hasheada" é pegar a senha que o usuário forneceu, passar ela pela mesma função de hash que você usou quando armazenou a senha do usuário no banco e comparar os resultados. Por exemplo, o md5 de "foo" é "d3b07384d113edec49eaa6238ad5ff00" e o md5 de "bar" é "c157a79031e1c40f85931829bc5fc552". Quando você comparar os dois hashes, a autenticação vai falhar. O que você tá tentando fazer é o caminho inverso. Uma forma de garantir mais segurança ainda é anexar uma string arbitrária nas senhas, conhecida como "salt", antes de passar pelo md5. Aí quando aquele script kiddie tentar "reverter" o md5 fazendo lookup no milw0rm etc, ele vai obter a senha anexada com o salt e quando ele for usar isso como senha, vai estar errado e ele vai achar que errou no tipo de hashing. Se você usar Catalyst, já vai obter isso tudo implementado, prontinho pra usar. -- Eden Cardim Need help with your Catalyst or DBIx::Class project? Code Monkey http://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://edenc.vox.com/ http://www.shadowcat.co.uk/servers/ From acid06 em gmail.com Mon Feb 1 06:42:09 2010 From: acid06 em gmail.com (Nilson Santos Figueiredo Jr.) Date: Mon, 1 Feb 2010 12:42:09 -0200 Subject: [Cascavel-pm] MD5 -> Fazer o Reverse In-Reply-To: <24D19474637F4B33BDFD179DEE1613AD@pcricardo> References: <0DAD881C986745FA8215DF1E0FECD9C0@pcricardo> <23f46d7f1001310353i6afb5851heeeadb0f657ca21a@mail.gmail.com> <179354401001311752o5da84641nb164e861661c6784@mail.gmail.com> <23f46d7f1002010217p5b49b49cr65179acc4453ccd9@mail.gmail.com> <24D19474637F4B33BDFD179DEE1613AD@pcricardo> Message-ID: <9a08c9b41002010642l459cd07eg7ebff532dfc8a835@mail.gmail.com> 2010/2/1 Ricardo Stock : > querai saber se tem como trabalhar com a senha criptografada, sem comparação > em texto puro, mas o russo me deu uma idea melhor. Ricardo, O que é utilizado normalmente não é criptografia pras senhas mas, sim, um hash das senhas. A idéia é que você guarda no banco de dados o hash da senha, em outras palavras, aquilo que é retornado pela função md5_hex do módulo Digest::MD5, ao invés de guardar a senha em texto puro. Dessa maneira, quando o usuário tentar fazer login em seu sistema, sua comparação vai ser assim: if ( $senha_do_banco_dados eq md5_hex( $senha_fornecida_pelo usuario ) { # permite login } else { # não permite o login } As vantagens dessa solução são que, se alguém tiver acesso ao seu banco de dados, eles não vão descobrir a senha de nenhum usuário. Inclusive, nem você mesmo, como "dono" do site, saberá a senha de seus usuários, o que é um ótimo recurso de privacidade (pois muita gente usa as mesmas senhas para diversos sites diferentes). -Nilson From mineiro em live.be Tue Feb 2 11:19:26 2010 From: mineiro em live.be (Lucas Moraes) Date: Tue, 2 Feb 2010 22:19:26 +0300 Subject: [Cascavel-pm] duvida sobre Toolkit Message-ID: Eu estou querendo usar o templates Toolkit, mais naum sei quais modulos devo instalar no Cpanel. Alguem pode me ajudar? Obrigado. _________________________________________________________________ Hotmail: betrouwbare e-mail met krachtige spambescherming van Microsoft. https://signup.live.com/signup.aspx?id=60969 -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From daniel.oliveira.mantovani em gmail.com Tue Feb 2 11:21:35 2010 From: daniel.oliveira.mantovani em gmail.com (Daniel de Oliveira Mantovani) Date: Tue, 2 Feb 2010 17:21:35 -0200 Subject: [Cascavel-pm] duvida sobre Toolkit In-Reply-To: References: Message-ID: <214823ca1002021121j656bf612v3309ba5b2b3b64f4@mail.gmail.com> Só o Template http://search.cpan.org/~abw/Template-Toolkit-2.22/lib/Template.pm cpan -i 'Template' 2010/2/2 Lucas Moraes : > Eu estou querendo usar o templates Toolkit, mais naum sei quais modulos devo > instalar no Cpanel. > > Alguem pode me ajudar? > > Obrigado. > > ________________________________ > Tijd voor een nieuwe telefoon? Bekijk de mogelijkheden van een Windows > Phone! > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- "If you?ve never written anything thoughtful, then you?ve never had any difficult, important, or interesting thoughts. That?s the secret: people who don?t write, are people who don?t think." From roanbrasil em gmail.com Wed Feb 3 10:21:15 2010 From: roanbrasil em gmail.com (Roan Brasil Monteiro) Date: Wed, 3 Feb 2010 15:21:15 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Express=E3o_Regular_Perl?= Message-ID: <403668001002031021i49e6515j13c6f25f9d37ff9a@mail.gmail.com> Man como em Perl eu faço uma expressão regular para substituir por exemplo: string: xxx0006xxx0006xxxalgumacoisaxxx0006xxx0006xxx...xxx0006 quero pegar o 0006 segundo e o quarto elemento e substituir. Tem alguma ideia? -- Atenciosamente, Roan Brasil Monteiro http://roanbrasil.wordpress.com/ -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From daniel.oliveira.mantovani em gmail.com Wed Feb 3 10:26:42 2010 From: daniel.oliveira.mantovani em gmail.com (Daniel de Oliveira Mantovani) Date: Wed, 3 Feb 2010 16:26:42 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Express=E3o_Regular_Perl?= In-Reply-To: <403668001002031021i49e6515j13c6f25f9d37ff9a@mail.gmail.com> References: <403668001002031021i49e6515j13c6f25f9d37ff9a@mail.gmail.com> Message-ID: <214823ca1002031026h5fc6fc54wb8c178e70e2994e0@mail.gmail.com> perldoc perlre http://perldoc.perl.org/perlre.html 2010/2/3 Roan Brasil Monteiro : > Man como em Perl eu faço uma expressão regular para substituir por exemplo: > string: xxx0006xxx0006xxxalgumacoisaxxx0006xxx0006xxx...xxx0006 > quero pegar o 0006 segundo e o quarto elemento e substituir. Tem alguma > ideia? > > -- > Atenciosamente, > > Roan Brasil Monteiro > http://roanbrasil.wordpress.com/ > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- "If you?ve never written anything thoughtful, then you?ve never had any difficult, important, or interesting thoughts. That?s the secret: people who don?t write, are people who don?t think." From frederico em gmail.com Wed Feb 3 11:49:44 2010 From: frederico em gmail.com (Frederico Recsky) Date: Wed, 3 Feb 2010 19:49:44 +0000 Subject: [Cascavel-pm] =?utf-8?q?Express=C3=A3o_Regular_Perl?= In-Reply-To: <403668001002031021i49e6515j13c6f25f9d37ff9a@mail.gmail.com> References: <403668001002031021i49e6515j13c6f25f9d37ff9a@mail.gmail.com> Message-ID: <88fe68ee1002031149y51bf5811gaf7d399f84d00299@mail.gmail.com> Olá, 010/2/3 Roan Brasil Monteiro : > Man como em Perl eu faço uma expressão regular para substituir por exemplo: > string: xxx0006xxx0006xxxalgumacoisaxxx0006xxx0006xxx...xxx0006 > quero pegar o 0006 segundo e o quarto elemento e substituir. Tem alguma > ideia? Uma coisa não muito magica mas que fica facil de entender depois é dar match em tudo, identificar e montar depois. use strict; use warnings; my $var = "xxx0006xxx0006xxxalgumacoisaxxx0006xxx0006xxx...xxx0006"; print "$var\n"; $var =~ /(\w+0006\w+) # dados aleatorios (0006) # nao gosto de 0006 pares (\w+0006\w+) # dados aleatorios (0006) # nao gosto de 0006 pares (\w+) # senhas do servidor (\.+) # pontinhos? (\w+)/x; #resto print $1 . "hoor" . $3 . "haar" . $5 . $6 . $7 . "\n"; o gmail zoou toda identação mas os comentarios supostamente tao alinhados :P. -- ____________________________ Frederico Recsky Linux User: #253572 http://www.fred.eti.br http://www.perl.org.br From jimmy.tty em gmail.com Wed Feb 3 12:06:48 2010 From: jimmy.tty em gmail.com (jimmy) Date: Wed, 3 Feb 2010 18:06:48 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Express=E3o_Regular_Perl?= In-Reply-To: <403668001002031021i49e6515j13c6f25f9d37ff9a@mail.gmail.com> References: <403668001002031021i49e6515j13c6f25f9d37ff9a@mail.gmail.com> Message-ID: <20100203200648.GH9464@mapabrasil.net> On Wed, Feb 03, 2010 at 03:21:15PM -0300, Roan Brasil Monteiro wrote: > Man como em Perl eu faço uma expressão regular para substituir por > exemplo: > string: xxx0006xxx0006xxxalgumacoisaxxx0006xxx0006xxx...xxx0006 > quero pegar o 0006 segundo e o quarto elemento e substituir. Tem alguma > ideia? > > -- > Atenciosamente, > > Roan Brasil Monteiro > http://roanbrasil.wordpress.com/ > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm saudações roan, usando a ferramenta gnu sed eu faria algo parecido com: $ sed 's/0006//2; s/0006//4 ' <<< 'string: xxx0006xxx0006xxxalgumacoisaxxx0006xxx0006xxx...xxx0006' mas no operador de substituição do perl não tem (ou não li a documentação corretamente) um quantificador com o do sed, gostaria de saber qual a forma recomendada para fazer essa substituição em perl porque a forma mais simples que consigo pensar é: $ perl -pe's/(.*?0006.*?)0006(.*?0006.*?)0006(.*?0006)/$1$2$3/' deve existir solução melhor. -- "Não manejo bem as palavras Mas manipulo bem as strings." ------------------------------ From mineiro em live.be Thu Feb 11 14:40:06 2010 From: mineiro em live.be (Lucas Moraes) Date: Fri, 12 Feb 2010 01:40:06 +0300 Subject: [Cascavel-pm] Sobre template Message-ID: Comprei o livro Programação CGI com Perl segunda edição, mais tem um exemplo com templates que naum esta funcionando, uso servidor linux, com cpanel e Perl versão 5.8.8, coloquei permissão 0755 no arquivo current_time.cgi, esses são os script, arquivo current_time.cgi #!/usr/bin/perl -wT use strict; use HTML::Template; use constant TMPL_FILE => "$ENV{DOCUMENT_ROOT}/templates/current_time.tmpl"; my $tmpl = new HTML::Template( filename => TMPL_FILE ); my $time = localtime; $tmpl->param( current_time => $time ); print "Content-type: text/html\n\n", $tmpl->output; arquivo current_time.tmpl Current Time

Current Time

Welcome. The current time is .

Alguem pode me ajudar? Obrigado _________________________________________________________________ Hotmail: betrouwbare e-mail met krachtige spambescherming van Microsoft. https://signup.live.com/signup.aspx?id=60969 -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From diogo86 em gmail.com Thu Feb 11 15:40:25 2010 From: diogo86 em gmail.com (Diogo Galvao) Date: Thu, 11 Feb 2010 21:40:25 -0200 Subject: [Cascavel-pm] Sobre template In-Reply-To: References: Message-ID: <18ae4b611002111540t2b7cc5a9h5dd50c414b0047c0@mail.gmail.com> O que acontece? Você recebe Internal Server Error? Página em branco? Como está o log de erro do Apache? Assim que estiver tudo certo, talvez você queira dar uma olhada no http://template-toolkit.com/ , é realmente excelente e parece ser unanimidade quando se fala em template. 2010/2/11 Lucas Moraes : > Comprei o livro Programação CGI com Perl segunda edição, mais tem um exemplo > com templates que naum esta funcionando, uso servidor linux, com cpanel e > Perl versão 5.8.8, coloquei permissão 0755 no arquivo > current_time.cgi, esses são os script, > > arquivo current_time.cgi > > #!/usr/bin/perl -wT > use strict; > use HTML::Template; > use constant TMPL_FILE => "$ENV{DOCUMENT_ROOT}/templates/current_time.tmpl"; > my $tmpl = new HTML::Template( filename => TMPL_FILE ); > my $time = localtime; > $tmpl->param( current_time => $time ); > print "Content-type: text/html\n\n", >       $tmpl->output; > > > > arquivo current_time.tmpl > > > >   Current Time > > >  

Current Time

>  

Welcome. The current time is .

> > > > > Alguem pode me ajudar? > > Obrigado > > ________________________________ > Tijd voor een nieuwe telefoon? Bekijk de mogelijkheden van een Windows > Phone! > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > From andreoandre em gmail.com Thu Feb 18 03:38:27 2010 From: andreoandre em gmail.com (=?ISO-8859-1?Q?Andr=E9_Moura?=) Date: Thu, 18 Feb 2010 09:38:27 -0200 Subject: [Cascavel-pm] Sobre template In-Reply-To: <18ae4b611002111540t2b7cc5a9h5dd50c414b0047c0@mail.gmail.com> References: <18ae4b611002111540t2b7cc5a9h5dd50c414b0047c0@mail.gmail.com> Message-ID: não parece ter nada de estranho nesse código, a não ser que o HTML::Template não esteja instalado ou esse caminho esta errado: use constant TMPL_FILE => "$ENV{DOCUMENT_ROOT}/templates/current_time.tmpl"; de uma olhada nos logs como foi falado... Uma coisa que pode te ajudar, uma vez - faz alguns anos - escrevi isso: http://www.oz.railsplayground.com/cgi-bin/HTML_Template_Perl_03012007 Talvez te ajude Abraços Em 11 de fevereiro de 2010 21:40, Diogo Galvao escreveu: > O que acontece? > > Você recebe Internal Server Error? Página em branco? Como está o log > de erro do Apache? > > Assim que estiver tudo certo, talvez você queira dar uma olhada no > http://template-toolkit.com/ , é realmente excelente e parece ser > unanimidade quando se fala em template. > > > 2010/2/11 Lucas Moraes : > > Comprei o livro Programação CGI com Perl segunda edição, mais tem um > exemplo > > com templates que naum esta funcionando, uso servidor linux, com cpanel e > > Perl versão 5.8.8, coloquei permissão 0755 no arquivo > > current_time.cgi, esses são os script, > > > > arquivo current_time.cgi > > > > #!/usr/bin/perl -wT > > use strict; > > use HTML::Template; > > use constant TMPL_FILE => > "$ENV{DOCUMENT_ROOT}/templates/current_time.tmpl"; > > my $tmpl = new HTML::Template( filename => TMPL_FILE ); > > my $time = localtime; > > $tmpl->param( current_time => $time ); > > print "Content-type: text/html\n\n", > > $tmpl->output; > > > > > > > > arquivo current_time.tmpl > > > > > > > > Current Time > > > > > >

Current Time

> >

Welcome. The current time is .

> > > > > > > > > > Alguem pode me ajudar? > > > > Obrigado > > > > ________________________________ > > Tijd voor een nieuwe telefoon? Bekijk de mogelijkheden van een Windows > > Phone! > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- André O Moura http://andrem.wordpress.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From gabrielssan em yahoo.com Thu Feb 18 06:12:56 2010 From: gabrielssan em yahoo.com (Gabriel Sancinetti) Date: Thu, 18 Feb 2010 06:12:56 -0800 (PST) Subject: [Cascavel-pm] Problema com pipe Message-ID: <352314.90594.qm@web65610.mail.ac4.yahoo.com> Olá, Estou trabalhando com perl há alguns meses e recentemente me deparei com um grande desafio.(pelo menos para mim). Não sei se esta lista é a adequada, mas ja gastei 4 semanas pesquisando no google e nada de solução. Enfim... Preciso reduzir o tempo de execução de um script de aproximadamente 50 minutos para 8 minutos. 1 - Este scrip faz mais de 2 mil "chamadas externas" de sistema operacional ( `comando` ) com timeout de 5 a 10 seguntos. 2 - É necessário processar o STDOUT e EXIT STATUS do comando em um processo único não necessáriamente em sequencia. A solução com certeza deve implementar alguma forma de paralelismo. Não consegui desenvolver uma forma de utilizar "open" no script. Então perdi para uma solução de baixo nível. Encontrei uma solução que quase atendeu minhas expectativas, mas estou com problemas de nível de Sistema Operacional nela. Recomendo que deem uma olhada no código pois agora irei descrever o problema deste código. O meu problema é a ocorrencia de grande quantidade de TIMEOUTs, isto é, o processo pai não recebe/processa as respostas dos filhos. Separei as chamadas de sistema em grupos de 80 comandos. Quando executo o script sem o sleep tanto no processo pai quanto no processo filho chego q ter mais de 50% de perda de respostas, (TIMEOUT) Conforme adiciono tempo ao sleep no processo filho, consigo reduzir a quantidade de TIMEOUTS considerávelmente, mas longe do satizfatório. Já quando adiciono o sleep antes do fork do processo filho a ocorrencia de TIMEOUTs cai a menos de 0.5%, mas o tempo de execução do script se aproxima do original (40 minutos). Acredito que meu problema esteja no processamento do sinal (kill), mas também pode ser no pipe. Não acredito que seja no pipe pois não ocorre erros no syswrite e no sysread, etc. Já estou quase certo de que terei que refazer tudo de outro jeito, mas estou sem idéias e preciso da opinião de pessoas mais experientes. Então, agradeço desde já a atenção de vocês e espero susgestões para corrigir este script ou para refazer de outro jeito. Cordialmente, Gabriel ps: Ignorem erros de sintaxe e identação pois editei o codigo no corpo da mensagem. ######################################################################################################### my $gotone; sub doneit { $gotone=$gotone+1; # logMsg("Got one! ($gotone)"); } $SIG{USR1} = \&doneit; my $parent = $$; $kids=0; $gotone=0; #Para não sobrecarregar o servidor, a lista de comandos é dividida em grupos de 80. (@CHECKS = (cmd1 .. cmd80)) foreach my $checkID (@CHECKS) { pipe *{$checkID},PIPEN; #Espera do processo pai antes de cada fork para testes # Este tempo de espera é diferencial na ocorrencia da falha # sleep(10); $PIDs{$checkID} = fork(); if (not defined $PIDs{$checkID}) { logMsg("ERROR: Fork FAILURE!!!"); } elsif ($PIDs{$checkID} == 0) { # Processo filho executa espera diminuindo probalidade de sobrecarga de respostas para processo pai. my $random_number = rand(); # my $random_wait = $random_number*3; sleep($random_wait); my $saida; $saida = `cmdN`; my $exit_value = $? >> 8; #Escreve saida no pipe para processo pai. my $write = syswrite PIPEN, "$exit_value;$saida"; if (!defined($write)) { logMsg("ERROR (write pipe): $!"); } close *{$checkID}; kill "USR1",$parent; exit(); # fim do processo filho } else { # Contagem de número de processos filhos no pai (80) $kids++; } } # While para processamento de respostas dos processos filhos # deve ser garantido que todos filhos serão processados while ($kids > 0) { # Aguarda 10 segundos depois de receber ultimo sinal (USR1). $gotone é uma variavel global que contabiliza o numero de processos filhos que ja responderam. Esta variavel é decrementada de acordo com o processamento dos filhos para controle de TIMEOUT. my $timeout = 10; # While para espera de resposta/sinal de processos filhos while ( $gotone < 1 && $timeout > 0) { sleep 1; $timeout=$timeout-1; } # if para encerrar processamento. Informa número de processos filhos que não responderam. # teoricamente este if nunca deve ser processado. ESTE É O PROBLEMA. if ($timeout <= 0) { logMsg("TIMEOUT!!! $kids checks não responderam a tempo."); $kids =0; next; } $gotone=$gotone-1; #for para saber qual filho respondeu (sysread irá falhar até encontrar) foreach my $checkID (@CHECKS) { my $win = ""; my $rin = $win; vec($rin, fileno(*{$checkID}), 1) = 1; my $ein = $rin ; if (select($rin,$win,$ein,0)) { my $response; my $read = sysread($checkID,$response,512); #if (!defined($read)) { # logMsg("ERROR (read pipe): $!"); #} #else { next;} my $saida=""; my $exit_value=""; ($exit_value,$saida) = split(';',$response); $saida =~ s/[\r\n]//g; $saida = $saida; # Executa processamento da resposta close *{$checkID}; $kids=$kids-1; last; } } } my $kid; do { $kid = waitpid(-1, WNOHANG); } while $kid > 0; } ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From daniel.oliveira.mantovani em gmail.com Thu Feb 18 07:11:16 2010 From: daniel.oliveira.mantovani em gmail.com (Daniel de Oliveira Mantovani) Date: Thu, 18 Feb 2010 13:11:16 -0200 Subject: [Cascavel-pm] Problema com pipe In-Reply-To: <352314.90594.qm@web65610.mail.ac4.yahoo.com> References: <352314.90594.qm@web65610.mail.ac4.yahoo.com> Message-ID: <214823ca1002180711t7ae60f2cx38d149497b93cddb@mail.gmail.com> Você acha mesmo que executar 80 comandos de uma vez e elevar o load da máquina ao infinito e além vai resolver o problema ? Me parece que o problema é muito além de um script ou dois. Uma hora esse "treco" vai parar, se já é que não para. Agora é a hora de "sentar, pensar e refazer" Da uma lida em: perldoc perlipc vai te ajudar nesse seu "treco". 2010/2/18 Gabriel Sancinetti : > Olá, > > Estou trabalhando com perl há alguns meses e recentemente me deparei com um > grande desafio.(pelo menos para mim). > Não sei se esta lista é a adequada, mas ja gastei 4 semanas pesquisando no > google e nada de solução. > > Enfim... > Preciso reduzir o tempo de execução de um script de aproximadamente 50 > minutos para 8 minutos. > 1 - Este scrip faz mais de 2 mil "chamadas externas" de sistema operacional > ( `comando` ) com timeout de 5 a 10 seguntos. > 2 - É necessário processar o STDOUT e EXIT STATUS do comando em um processo > único não necessáriamente em sequencia. > > A solução com certeza deve implementar alguma forma de paralelismo. > Não consegui desenvolver uma forma de utilizar "open" no script. Então perdi > para uma solução de baixo nível. > > Encontrei uma solução que quase atendeu minhas expectativas, mas estou com > problemas de nível de Sistema Operacional nela. > > Recomendo que deem uma olhada no código pois agora irei descrever o problema > deste código. > > O meu problema é a ocorrencia de grande quantidade de TIMEOUTs, isto é, o > processo pai não recebe/processa as respostas dos filhos. > Separei as chamadas de sistema em grupos de 80 comandos. > Quando executo o script sem o sleep tanto no processo pai quanto no processo > filho chego q ter mais de 50% de perda de respostas, (TIMEOUT) > Conforme adiciono tempo ao sleep no processo filho, consigo reduzir a > quantidade de TIMEOUTS considerávelmente, mas longe do satizfatório. > Já quando adiciono o sleep antes do fork do processo filho a ocorrencia de > TIMEOUTs cai a menos de 0.5%, mas o tempo de execução do script se aproxima > do original (40 minutos). > > Acredito que meu problema esteja no processamento do sinal (kill), mas > também pode ser no pipe. Não acredito que seja no pipe pois não ocorre erros > no syswrite e no sysread, etc. > Já estou quase certo de que terei que refazer tudo de outro jeito, mas estou > sem idéias e preciso da opinião de pessoas mais experientes. > > Então, agradeço desde já a atenção de vocês e espero susgestões para > corrigir este script ou para refazer de outro jeito. > > Cordialmente, > > Gabriel > > ps: Ignorem erros de sintaxe e identação pois editei o codigo no corpo da > mensagem. > > ######################################################################################################### > my $gotone; > sub doneit { >     $gotone=$gotone+1; > #    logMsg("Got one! ($gotone)"); > } > > $SIG{USR1} = \&doneit; > my $parent = $$; > $kids=0; > $gotone=0; > > #Para não sobrecarregar o servidor, a lista de comandos é dividida em grupos > de 80. (@CHECKS = (cmd1 .. cmd80)) > foreach my $checkID (@CHECKS) { > >             pipe *{$checkID},PIPEN; > >              #Espera do processo pai antes de cada fork para testes >             # Este tempo de espera é diferencial na ocorrencia da falha > #           sleep(10); > >             $PIDs{$checkID} = fork(); >             if (not defined $PIDs{$checkID}) { >                 logMsg("ERROR: Fork FAILURE!!!"); > >             } elsif ($PIDs{$checkID} == 0) { >                 # Processo filho executa espera diminuindo probalidade de > sobrecarga de respostas para processo pai. >                 my $random_number = rand(); > #                my $random_wait = $random_number*3; >                 sleep($random_wait); > >                 my $saida; >                 $saida = `cmdN`; >                 my $exit_value = $? >> 8; > >                 #Escreve saida no pipe para processo pai. >                 my $write = syswrite PIPEN, "$exit_value;$saida"; >                 if (!defined($write)) { >                     logMsg("ERROR (write pipe): $!"); >                 } > >                 close *{$checkID}; >                 kill "USR1",$parent; >                 exit(); >                 # fim do processo filho >             } else { >                 # Contagem de número de processos filhos no pai (80) >                 $kids++; >             } >         } > >         # While para processamento de respostas dos processos filhos >         # deve ser garantido que todos filhos serão processados >         while ($kids > 0) { > >             # Aguarda 10 segundos depois de receber ultimo sinal (USR1). > $gotone é uma variavel global que contabiliza o numero de processos filhos > que ja responderam. Esta variavel é decrementada de acordo com o > processamento dos filhos para controle de TIMEOUT. >             my $timeout = 10; >             # While para espera de resposta/sinal de processos filhos >             while ( $gotone  < 1 && $timeout > 0) { >                 sleep 1; >                 $timeout=$timeout-1; >             } > >             # if para encerrar processamento. Informa número de processos > filhos que não responderam. >             # teoricamente este if nunca deve ser processado. ESTE É O > PROBLEMA. >             if ($timeout <= 0) { >                 logMsg("TIMEOUT!!! $kids checks não responderam a tempo."); >                 $kids =0; >                 next; >             } > > >             $gotone=$gotone-1; > >             #for para saber qual filho respondeu (sysread irá falhar até > encontrar) >             foreach my $checkID (@CHECKS) { > >                 my $win = ""; >                 my $rin = $win; >                 vec($rin, fileno(*{$checkID}), 1) = 1; >                 my $ein = $rin ; >                 if (select($rin,$win,$ein,0)) { >                     my $response; >                     my $read = sysread($checkID,$response,512); >                     #if (!defined($read)) { >                      #   logMsg("ERROR (read pipe): $!"); >                     #} >                     #else { next;} > >                    my $saida=""; >                     my $exit_value=""; >                     ($exit_value,$saida) = split(';',$response); >                     $saida =~ s/[\r\n]//g; >                     $saida = $saida; > >                     # Executa processamento da resposta > >                     close *{$checkID}; >                     $kids=$kids-1; >                     last; >                 } >             } >         } >         my $kid; >         do { >             $kid = waitpid(-1, WNOHANG); >         } while $kid > 0; >     } > > > > > > > > > ________________________________ > Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - > Celebridades - Música - Esportes > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- "If you?ve never written anything thoughtful, then you?ve never had any difficult, important, or interesting thoughts. That?s the secret: people who don?t write, are people who don?t think." From edencardim em gmail.com Thu Feb 18 07:57:49 2010 From: edencardim em gmail.com (Eden Cardim) Date: Thu, 18 Feb 2010 12:57:49 -0300 Subject: [Cascavel-pm] Problema com pipe In-Reply-To: <352314.90594.qm@web65610.mail.ac4.yahoo.com> (Gabriel Sancinetti's message of "Thu, 18 Feb 2010 06:12:56 -0800 (PST)") References: <352314.90594.qm@web65610.mail.ac4.yahoo.com> Message-ID: <87bpfm7czm.fsf@janis.localdomain> >>>>> "Gabriel" == Gabriel Sancinetti writes: Gabriel> Olá, Estou trabalhando com perl há alguns meses e Gabriel> recentemente me deparei com um grande desafio.(pelo menos Gabriel> para mim). Não sei se esta lista é a adequada, mas ja Gabriel> gastei 4 semanas pesquisando no google e nada de solução. Gabriel> Enfim... Preciso reduzir o tempo de execução de um script Gabriel> de aproximadamente 50 minutos para 8 minutos. 1 - Este Gabriel> scrip faz mais de 2 mil "chamadas externas" de sistema Gabriel> operacional ( `comando` ) com timeout de 5 a 10 seguntos. Gabriel> 2 - É necessário processar o STDOUT e EXIT STATUS do Gabriel> comando em um processo único não necessáriamente em Gabriel> sequencia. Gabriel> A solução com certeza deve implementar alguma forma de Gabriel> paralelismo. Não consegui desenvolver uma forma de Gabriel> utilizar "open" no script. Então perdi para uma solução de Gabriel> baixo nível. Dá uma olhada no AnyEvent::Subprocess no CPAN. -- Eden Cardim Need help with your Catalyst or DBIx::Class project? Code Monkey http://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://edenc.vox.com/ http://www.shadowcat.co.uk/servers/ From gabrielssan em yahoo.com Thu Feb 18 08:45:48 2010 From: gabrielssan em yahoo.com (Gabriel Sancinetti) Date: Thu, 18 Feb 2010 08:45:48 -0800 (PST) Subject: [Cascavel-pm] Res: Problema com pipe In-Reply-To: <214823ca1002180711t7ae60f2cx38d149497b93cddb@mail.gmail.com> References: <352314.90594.qm@web65610.mail.ac4.yahoo.com> <214823ca1002180711t7ae60f2cx38d149497b93cddb@mail.gmail.com> Message-ID: <373416.52309.qm@web65603.mail.ac4.yahoo.com> Para aqueles que tiverem dúvidas, segue pagina de onde retirei a estrutura do código. http://www.wellho.net/solutions/perl-controlling-multiple-asyncronous-processes-in-perl.html ________________________________ De: Daniel de Oliveira Mantovani Para: Cascavel Perl Mongers Enviadas: Quinta-feira, 18 de Fevereiro de 2010 13:11:16 Assunto: Re: [Cascavel-pm] Problema com pipe Você acha mesmo que executar 80 comandos de uma vez e elevar o load da máquina ao infinito e além vai resolver o problema ? Me parece que o problema é muito além de um script ou dois. Uma hora esse "treco" vai parar, se já é que não para. Agora é a hora de "sentar, pensar e refazer" Da uma lida em: perldoc perlipc vai te ajudar nesse seu "treco". 2010/2/18 Gabriel Sancinetti : > Olá, > > Estou trabalhando com perl há alguns meses e recentemente me deparei com um > grande desafio.(pelo menos para mim). > Não sei se esta lista é a adequada, mas ja gastei 4 semanas pesquisando no > google e nada de solução. > > Enfim... > Preciso reduzir o tempo de execução de um script de aproximadamente 50 > minutos para 8 minutos. > 1 - Este scrip faz mais de 2 mil "chamadas externas" de sistema operacional > ( `comando` ) com timeout de 5 a 10 seguntos. > 2 - É necessário processar o STDOUT e EXIT STATUS do comando em um processo > único não necessáriamente em sequencia. > > A solução com certeza deve implementar alguma forma de paralelismo. > Não consegui desenvolver uma forma de utilizar "open" no script. Então perdi > para uma solução de baixo nível. > > Encontrei uma solução que quase atendeu minhas expectativas, mas estou com > problemas de nível de Sistema Operacional nela. > > Recomendo que deem uma olhada no código pois agora irei descrever o problema > deste código. > > O meu problema é a ocorrencia de grande quantidade de TIMEOUTs, isto é, o > processo pai não recebe/processa as respostas dos filhos. > Separei as chamadas de sistema em grupos de 80 comandos. > Quando executo o script sem o sleep tanto no processo pai quanto no processo > filho chego q ter mais de 50% de perda de respostas, (TIMEOUT) > Conforme adiciono tempo ao sleep no processo filho, consigo reduzir a > quantidade de TIMEOUTS considerávelmente, mas longe do satizfatório. > Já quando adiciono o sleep antes do fork do processo filho a ocorrencia de > TIMEOUTs cai a menos de 0.5%, mas o tempo de execução do script se aproxima > do original (40 minutos). > > Acredito que meu problema esteja no processamento do sinal (kill), mas > também pode ser no pipe. Não acredito que seja no pipe pois não ocorre erros > no syswrite e no sysread, etc. > Já estou quase certo de que terei que refazer tudo de outro jeito, mas estou > sem idéias e preciso da opinião de pessoas mais experientes. > > Então, agradeço desde já a atenção de vocês e espero susgestões para > corrigir este script ou para refazer de outro jeito. > > Cordialmente, > > Gabriel > > ps: Ignorem erros de sintaxe e identação pois editei o codigo no corpo da > mensagem. > > ######################################################################################################### > my $gotone; > sub doneit { > $gotone=$gotone+1; > # logMsg("Got one! ($gotone)"); > } > > $SIG{USR1} = \&doneit; > my $parent = $$; > $kids=0; > $gotone=0; > > #Para não sobrecarregar o servidor, a lista de comandos é dividida em grupos > de 80. (@CHECKS = (cmd1 .. cmd80)) > foreach my $checkID (@CHECKS) { > > pipe *{$checkID},PIPEN; > > #Espera do processo pai antes de cada fork para testes > # Este tempo de espera é diferencial na ocorrencia da falha > # sleep(10); > > $PIDs{$checkID} = fork(); > if (not defined $PIDs{$checkID}) { > logMsg("ERROR: Fork FAILURE!!!"); > > } elsif ($PIDs{$checkID} == 0) { > # Processo filho executa espera diminuindo probalidade de > sobrecarga de respostas para processo pai. > my $random_number = rand(); > # my $random_wait = $random_number*3; > sleep($random_wait); > > my $saida; > $saida = `cmdN`; > my $exit_value = $? >> 8; > > #Escreve saida no pipe para processo pai. > my $write = syswrite PIPEN, "$exit_value;$saida"; > if (!defined($write)) { > logMsg("ERROR (write pipe): $!"); > } > > close *{$checkID}; > kill "USR1",$parent; > exit(); > # fim do processo filho > } else { > # Contagem de número de processos filhos no pai (80) > $kids++; > } > } > > # While para processamento de respostas dos processos filhos > # deve ser garantido que todos filhos serão processados > while ($kids > 0) { > > # Aguarda 10 segundos depois de receber ultimo sinal (USR1). > $gotone é uma variavel global que contabiliza o numero de processos filhos > que ja responderam. Esta variavel é decrementada de acordo com o > processamento dos filhos para controle de TIMEOUT. > my $timeout = 10; > # While para espera de resposta/sinal de processos filhos > while ( $gotone < 1 && $timeout > 0) { > sleep 1; > $timeout=$timeout-1; > } > > # if para encerrar processamento. Informa número de processos > filhos que não responderam. > # teoricamente este if nunca deve ser processado. ESTE É O > PROBLEMA. > if ($timeout <= 0) { > logMsg("TIMEOUT!!! $kids checks não responderam a tempo."); > $kids =0; > next; > } > > > $gotone=$gotone-1; > > #for para saber qual filho respondeu (sysread irá falhar até > encontrar) > foreach my $checkID (@CHECKS) { > > my $win = ""; > my $rin = $win; > vec($rin, fileno(*{$checkID}), 1) = 1; > my $ein = $rin ; > if (select($rin,$win,$ein,0)) { > my $response; > my $read = sysread($checkID,$response,512); > #if (!defined($read)) { > # logMsg("ERROR (read pipe): $!"); > #} > #else { next;} > > my $saida=""; > my $exit_value=""; > ($exit_value,$saida) = split(';',$response); > $saida =~ s/[\r\n]//g; > $saida = $saida; > > # Executa processamento da resposta > > close *{$checkID}; > $kids=$kids-1; > last; > } > } > } > my $kid; > do { > $kid = waitpid(-1, WNOHANG); > } while $kid > 0; > } > > > > > > > > > ________________________________ > Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - > Celebridades - Música - Esportes > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- "If you?ve never written anything thoughtful, then you?ve never had any difficult, important, or interesting thoughts. That?s the secret: people who don?t write, are people who don?t think." _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From otaviof em gmail.com Thu Feb 18 10:03:11 2010 From: otaviof em gmail.com (=?ISO-8859-1?Q?Ot=E1vio_Fernandes?=) Date: Thu, 18 Feb 2010 16:03:11 -0200 Subject: [Cascavel-pm] Problema com pipe In-Reply-To: <352314.90594.qm@web65610.mail.ac4.yahoo.com> References: <352314.90594.qm@web65610.mail.ac4.yahoo.com> Message-ID: <8e3843571002181003y358201fdqef8ec4a93241e54a@mail.gmail.com> Gabriel, Vou fugir um pouco dos fontes. Porque você precisa executar 80 comandos no servidor? Qual o intúito da sua aplicação, fale um pouco mais sobre ela. um abraço, -- Otávio Fernandes http://blog.emresumo.com From glasswalk3r em yahoo.com.br Thu Feb 18 10:27:18 2010 From: glasswalk3r em yahoo.com.br (Alceu R. de Freitas Jr.) Date: Thu, 18 Feb 2010 10:27:18 -0800 (PST) Subject: [Cascavel-pm] Problema com pipe In-Reply-To: <214823ca1002180711t7ae60f2cx38d149497b93cddb@mail.gmail.com> Message-ID: <165324.82865.qm@web30808.mail.mud.yahoo.com> Olá Gabriel, Que comando é esse que você chama externamente? Por que algumas vezes você recebe timeout? Simplesmente porque o processo externo que você está executando demora? Não é possível você substituir esse processo externo por código Perl equivalente? Você evitaria um fork adicional e possivelmente tornaria mais fácil identificar erros. Já executou um profile do seu programa para identificar quais áreas tomam mais tempo de execução do seu programa? Eu escrevi um artigo sobre isso no perl.org.br. Dê uma olhada no Parallel::ForkManager (http://search.cpan.org/~dlux/Parallel-ForkManager-0.7.5/ForkManager.pm) e veja se ele não te ajuda. Se o hardware que você não der conta do recado mesmo você tendo otimizado o código, verifique se você não pode usar o OpenMosix para distribuir a carga. Mas só vale a pena se seu processo não realizar muito I/O. Abraços, Alceu > 2010/2/18 Gabriel Sancinetti : > > Olá, > > > > Estou trabalhando com perl há alguns meses e > recentemente me deparei com um > > grande desafio.(pelo menos para mim). > > Não sei se esta lista é a adequada, mas ja gastei 4 > semanas pesquisando no > > google e nada de solução. > > > > Enfim... > > Preciso reduzir o tempo de execução de um script de > aproximadamente 50 > > minutos para 8 minutos. > > 1 - Este scrip faz mais de 2 mil "chamadas externas" > de sistema operacional > > ( `comando` ) com timeout de 5 a 10 seguntos. > > 2 - É necessário processar o STDOUT e EXIT STATUS do > comando em um processo > > único não necessáriamente em sequencia. > > > > A solução com certeza deve implementar alguma forma > de paralelismo. > > Não consegui desenvolver uma forma de utilizar "open" > no script. Então perdi > > para uma solução de baixo nível. > > > > Encontrei uma solução que quase atendeu minhas > expectativas, mas estou com > > problemas de nível de Sistema Operacional nela. > > > > Recomendo que deem uma olhada no código pois agora > irei descrever o problema > > deste código. > > > > O meu problema é a ocorrencia de grande quantidade de > TIMEOUTs, isto é, o > > processo pai não recebe/processa as respostas dos > filhos. > > Separei as chamadas de sistema em grupos de 80 > comandos. > > Quando executo o script sem o sleep tanto no processo > pai quanto no processo > > filho chego q ter mais de 50% de perda de respostas, > (TIMEOUT) > > Conforme adiciono tempo ao sleep no processo filho, > consigo reduzir a > > quantidade de TIMEOUTS considerávelmente, mas longe > do satizfatório. > > Já quando adiciono o sleep antes do fork do processo > filho a ocorrencia de > > TIMEOUTs cai a menos de 0.5%, mas o tempo de > execução do script se aproxima > > do original (40 minutos). > > > > Acredito que meu problema esteja no processamento do > sinal (kill), mas > > também pode ser no pipe. Não acredito que seja no > pipe pois não ocorre erros > > no syswrite e no sysread, etc. > > Já estou quase certo de que terei que refazer tudo de > outro jeito, mas estou > > sem idéias e preciso da opinião de pessoas mais > experientes. > > > > Então, agradeço desde já a atenção de vocês e > espero susgestões para > > corrigir este script ou para refazer de outro jeito. > > > > Cordialmente, > > > > Gabriel > > > > ps: Ignorem erros de sintaxe e identação pois editei > o codigo no corpo da > > mensagem. > > > > > ######################################################################################################### > > my $gotone; > > sub doneit { > >     $gotone=$gotone+1; > > #    logMsg("Got one! ($gotone)"); > > } > > > > $SIG{USR1} = \&doneit; > > my $parent = $$; > > $kids=0; > > $gotone=0; > > > > #Para não sobrecarregar o servidor, a lista de > comandos é dividida em grupos > > de 80. (@CHECKS = (cmd1 .. cmd80)) > > foreach my $checkID (@CHECKS) { > > > >             pipe *{$checkID},PIPEN; > > > >              #Espera do processo pai antes > de cada fork para testes > >             # Este tempo de espera é > diferencial na ocorrencia da falha > > #           sleep(10); > > > >             $PIDs{$checkID} = fork(); > >             if (not defined $PIDs{$checkID}) > { > >                 logMsg("ERROR: Fork > FAILURE!!!"); > > > >             } elsif ($PIDs{$checkID} == 0) { > >                 # Processo filho executa > espera diminuindo probalidade de > > sobrecarga de respostas para processo pai. > >                 my $random_number = > rand(); > > #                my $random_wait = > $random_number*3; > >                 sleep($random_wait); > > > >                 my $saida; > >                 $saida = `cmdN`; > >                 my $exit_value = $? > >> 8; > > > >                 #Escreve saida no pipe > para processo pai. > >                 my $write = syswrite > PIPEN, "$exit_value;$saida"; > >                 if (!defined($write)) { > >                     logMsg("ERROR > (write pipe): $!"); > >                 } > > > >                 close *{$checkID}; > >                 kill "USR1",$parent; > >                 exit(); > >                 # fim do processo filho > >             } else { > >                 # Contagem de número de > processos filhos no pai (80) > >                 $kids++; > >             } > >         } > > > >         # While para processamento de respostas > dos processos filhos > >         # deve ser garantido que todos filhos > serão processados > >         while ($kids > 0) { > > > >             # Aguarda 10 segundos depois de > receber ultimo sinal (USR1). > > $gotone é uma variavel global que contabiliza o > numero de processos filhos > > que ja responderam. Esta variavel é decrementada de > acordo com o > > processamento dos filhos para controle de TIMEOUT. > >             my $timeout = 10; > >             # While para espera de > resposta/sinal de processos filhos > >             while ( $gotone  < 1 > && $timeout > 0) { > >                 sleep 1; > >                 $timeout=$timeout-1; > >             } > > > >             # if para encerrar > processamento. Informa número de processos > > filhos que não responderam. > >             # teoricamente este if nunca > deve ser processado. ESTE É O > > PROBLEMA. > >             if ($timeout <= 0) { > >                 logMsg("TIMEOUT!!! $kids > checks não responderam a tempo."); > >                 $kids =0; > >                 next; > >             } > > > > > >             $gotone=$gotone-1; > > > >             #for para saber qual filho > respondeu (sysread irá falhar até > > encontrar) > >             foreach my $checkID (@CHECKS) { > > > >                 my $win = ""; > >                 my $rin = $win; > >                 vec($rin, > fileno(*{$checkID}), 1) = 1; > >                 my $ein = $rin ; > >                 if > (select($rin,$win,$ein,0)) { > >                     my $response; > >                     my $read = > sysread($checkID,$response,512); > >                     #if > (!defined($read)) { > >                      #   > logMsg("ERROR (read pipe): $!"); > >                     #} > >                     #else { next;} > > > >                    my $saida=""; > >                     my $exit_value=""; > >                    >  ($exit_value,$saida) = split(';',$response); > >                     $saida =~ > s/[\r\n]//g; > >                     $saida = $saida; > > > >                     # Executa > processamento da resposta > > > >                     close *{$checkID}; > >                     $kids=$kids-1; > >                     last; > >                 } > >             } > >         } > >         my $kid; > >         do { > >             $kid = waitpid(-1, WNOHANG); > >         } while $kid > 0; > >     } > > > > > > > > > > > > > > > > > > ________________________________ > > Veja quais são os assuntos do momento no Yahoo! + > Buscados: Top 10 - > > Celebridades - Música - Esportes > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > -- > "If you?ve never written anything thoughtful, then > you?ve never had > any difficult, important, or interesting thoughts. That?s > the secret: > people who don?t write, are people who don?t think." > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com From gabrielssan em yahoo.com Thu Feb 18 11:08:28 2010 From: gabrielssan em yahoo.com (Gabriel Sancinetti) Date: Thu, 18 Feb 2010 11:08:28 -0800 (PST) Subject: [Cascavel-pm] Res: Problema com pipe In-Reply-To: <165324.82865.qm@web30808.mail.mud.yahoo.com> References: <165324.82865.qm@web30808.mail.mud.yahoo.com> Message-ID: <67005.68247.qm@web65607.mail.ac4.yahoo.com> Alceu, O comando executado pode ser qualquer script da libexec do Nagios. Em 99% dos casos check_nrpe ou check_nt. Pretendo monitorar hosts atualmente monitorados pelo nagios atráves de um sistema proprietário. A intenção é integrar o legado com o novo para que não seja necessário "intervir" em hosts de clientes para instalação de um novo serviço de monitoramento. O novo sistema propriétário possui uma inteface em Perl para geração de eventos. Então executo a linha de comando e manipulo o resultado no script.para gerar ou limpar o evento no novo sistema. Para aqueles que não conhecem Nagios: Não existe a possibilidade do comando não retornar resultado pois o comando já tem o próprio timeout. Quanto ao "ForkManager" foi a minha primeira tentativa sem sucesso. Não me lembro por qual motivo o abandonei, mas com certeza está relacionado à necessidade aguardar a execução de multiplos processos filhos e processar seus resultados assincronamente. Se é possível, eu não me lembro. Att. Gabriel ________________________________ De: Alceu R. de Freitas Jr. Para: Cascavel Perl Mongers Enviadas: Quinta-feira, 18 de Fevereiro de 2010 16:27:18 Assunto: Re: [Cascavel-pm] Problema com pipe Olá Gabriel, Que comando é esse que você chama externamente? Por que algumas vezes você recebe timeout? Simplesmente porque o processo externo que você está executando demora? Não é possível você substituir esse processo externo por código Perl equivalente? Você evitaria um fork adicional e possivelmente tornaria mais fácil identificar erros. Já executou um profile do seu programa para identificar quais áreas tomam mais tempo de execução do seu programa? Eu escrevi um artigo sobre isso no perl.org.br. Dê uma olhada no Parallel::ForkManager (http://search.cpan.org/~dlux/Parallel-ForkManager-0.7.5/ForkManager.pm) e veja se ele não te ajuda. Se o hardware que você não der conta do recado mesmo você tendo otimizado o código, verifique se você não pode usar o OpenMosix para distribuir a carga. Mas só vale a pena se seu processo não realizar muito I/O. Abraços, Alceu > 2010/2/18 Gabriel Sancinetti : > > Olá, > > > > Estou trabalhando com perl há alguns meses e > recentemente me deparei com um > > grande desafio.(pelo menos para mim). > > Não sei se esta lista é a adequada, mas ja gastei 4 > semanas pesquisando no > > google e nada de solução. > > > > Enfim... > > Preciso reduzir o tempo de execução de um script de > aproximadamente 50 > > minutos para 8 minutos. > > 1 - Este scrip faz mais de 2 mil "chamadas externas" > de sistema operacional > > ( `comando` ) com timeout de 5 a 10 seguntos. > > 2 - É necessário processar o STDOUT e EXIT STATUS do > comando em um processo > > único não necessáriamente em sequencia. > > > > A solução com certeza deve implementar alguma forma > de paralelismo. > > Não consegui desenvolver uma forma de utilizar "open" > no script. Então perdi > > para uma solução de baixo nível. > > > > Encontrei uma solução que quase atendeu minhas > expectativas, mas estou com > > problemas de nível de Sistema Operacional nela. > > > > Recomendo que deem uma olhada no código pois agora > irei descrever o problema > > deste código. > > > > O meu problema é a ocorrencia de grande quantidade de > TIMEOUTs, isto é, o > > processo pai não recebe/processa as respostas dos > filhos. > > Separei as chamadas de sistema em grupos de 80 > comandos. > > Quando executo o script sem o sleep tanto no processo > pai quanto no processo > > filho chego q ter mais de 50% de perda de respostas, > (TIMEOUT) > > Conforme adiciono tempo ao sleep no processo filho, > consigo reduzir a > > quantidade de TIMEOUTS considerávelmente, mas longe > do satizfatório. > > Já quando adiciono o sleep antes do fork do processo > filho a ocorrencia de > > TIMEOUTs cai a menos de 0.5%, mas o tempo de > execução do script se aproxima > > do original (40 minutos). > > > > Acredito que meu problema esteja no processamento do > sinal (kill), mas > > também pode ser no pipe. Não acredito que seja no > pipe pois não ocorre erros > > no syswrite e no sysread, etc. > > Já estou quase certo de que terei que refazer tudo de > outro jeito, mas estou > > sem idéias e preciso da opinião de pessoas mais > experientes. > > > > Então, agradeço desde já a atenção de vocês e > espero susgestões para > > corrigir este script ou para refazer de outro jeito. > > > > Cordialmente, > > > > Gabriel > > > > ps: Ignorem erros de sintaxe e identação pois editei > o codigo no corpo da > > mensagem. > > > > > > > > ________________________________ > > Veja quais são os assuntos do momento no Yahoo! + > Buscados: Top 10 - > > Celebridades - Música - Esportes > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > -- > "If you?ve never written anything thoughtful, then > you?ve never had > any difficult, important, or interesting thoughts. That?s > the secret: > people who don?t write, are people who don?t think." > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From gabrielssan em yahoo.com Thu Feb 18 11:21:36 2010 From: gabrielssan em yahoo.com (Gabriel Sancinetti) Date: Thu, 18 Feb 2010 11:21:36 -0800 (PST) Subject: [Cascavel-pm] Res: Problema com pipe In-Reply-To: <87bpfm7czm.fsf@janis.localdomain> References: <352314.90594.qm@web65610.mail.ac4.yahoo.com> <87bpfm7czm.fsf@janis.localdomain> Message-ID: <754610.54269.qm@web65603.mail.ac4.yahoo.com> Eden, Passei a tarde estudando esse AnyEvent::SubProcess. Mas infelizmente não encontrei muitos exemplos. Entendi como criar o processo filho, como redirecionar STDIN,STDOUT,STDERR, mas não como fazer o processo pai saber que todos filhos terminaram e onde ler o STDOUT dos filhos. Você tem alguma dica? Grato Gabriel ________________________________ De: Eden Cardim Para: Cascavel Perl Mongers Enviadas: Quinta-feira, 18 de Fevereiro de 2010 13:57:49 Assunto: Re: [Cascavel-pm] Problema com pipe >>>>> "Gabriel" == Gabriel Sancinetti writes: Gabriel> Olá, Estou trabalhando com perl há alguns meses e Gabriel> recentemente me deparei com um grande desafio.(pelo menos Gabriel> para mim). Não sei se esta lista é a adequada, mas ja Gabriel> gastei 4 semanas pesquisando no google e nada de solução. Gabriel> Enfim... Preciso reduzir o tempo de execução de um script Gabriel> de aproximadamente 50 minutos para 8 minutos. 1 - Este Gabriel> scrip faz mais de 2 mil "chamadas externas" de sistema Gabriel> operacional ( `comando` ) com timeout de 5 a 10 seguntos. Gabriel> 2 - É necessário processar o STDOUT e EXIT STATUS do Gabriel> comando em um processo único não necessáriamente em Gabriel> sequencia. Gabriel> A solução com certeza deve implementar alguma forma de Gabriel> paralelismo. Não consegui desenvolver uma forma de Gabriel> utilizar "open" no script. Então perdi para uma solução de Gabriel> baixo nível. Dá uma olhada no AnyEvent::Subprocess no CPAN. -- Eden Cardim Need help with your Catalyst or DBIx::Class project? Code Monkey http://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://edenc.vox.com/ http://www.shadowcat.co.uk/servers/ _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From otaviof em gmail.com Thu Feb 18 11:22:57 2010 From: otaviof em gmail.com (=?ISO-8859-1?Q?Ot=E1vio_Fernandes?=) Date: Thu, 18 Feb 2010 17:22:57 -0200 Subject: [Cascavel-pm] Res: Problema com pipe In-Reply-To: <67005.68247.qm@web65607.mail.ac4.yahoo.com> References: <165324.82865.qm@web30808.mail.mud.yahoo.com> <67005.68247.qm@web65607.mail.ac4.yahoo.com> Message-ID: <8e3843571002181122l2f0dcc35lf196a2e2974ba8f8@mail.gmail.com> 2010/2/18 Gabriel Sancinetti : > Alceu, > > O comando executado pode ser qualquer script da libexec do Nagios. > Em 99% dos casos check_nrpe ou check_nt. > > Pretendo monitorar hosts atualmente monitorados pelo nagios atráves de um > sistema proprietário. > A intenção é integrar o legado com o novo para que não seja necessário > "intervir" em hosts de clientes para instalação de um novo serviço de > monitoramento. > O novo sistema propriétário possui uma inteface em Perl para geração de > eventos. Então executo a linha de comando e manipulo o resultado no > script.para gerar ou limpar o evento no novo sistema. > > Para aqueles que não conhecem Nagios:  Não existe a possibilidade do comando > não retornar resultado pois o comando já tem o próprio timeout. > > Quanto ao "ForkManager" foi a minha primeira tentativa sem sucesso. Não me > lembro por qual motivo o abandonei, mas com certeza está relacionado à > necessidade aguardar a execução de multiplos processos filhos e processar > seus resultados assincronamente. > Se é possível, eu não me lembro. > > Att. > > Gabriel Gabriel, O sistema proprietário vai ser um "wrapper" para o Nagios? Neste sistema não existe a possibilidade de usar SNMP diretamente? Porque, se você fizer um script, da forma como você nos descreveu, para integrar o sistema antigo e o novo, me parece muito mais com uma "gambiarra" do que com qualquer outra coisa. A minha sugestão para o seu caso, é fazer pequenos scripts que atuem como um "bind" para cada plugin do Nagios, no qual, o sistema novo informa qual host ele quer informações sobre. Assim você passa ao novo software o dever de trabalhar em paralelo, o que provavelmente ele já faz, afinal, é uma premissa para monitorar. Atenciosamente, -- Otávio Fernandes http://blog.emresumo.com From gabrielssan em yahoo.com Thu Feb 18 11:56:16 2010 From: gabrielssan em yahoo.com (Gabriel Sancinetti) Date: Thu, 18 Feb 2010 11:56:16 -0800 (PST) Subject: [Cascavel-pm] Res: Res: Problema com pipe In-Reply-To: <8e3843571002181122l2f0dcc35lf196a2e2974ba8f8@mail.gmail.com> References: <165324.82865.qm@web30808.mail.mud.yahoo.com> <67005.68247.qm@web65607.mail.ac4.yahoo.com> <8e3843571002181122l2f0dcc35lf196a2e2974ba8f8@mail.gmail.com> Message-ID: <583431.98541.qm@web65607.mail.ac4.yahoo.com> Otávio, O novo sistema é nativamente SNMP. A interface pode até ser uma gambiarra, mas é necessária. Na empresa que eu trabalho temos hosts (servidores), para os quais é extremamente complicado e burocrático instalar qualquer tipo de atualização. São mais de 500, e o esforço tanto burocrático como nas execuções das atualizações é enorme. Então é mais fácil nos adaptarmos ao legado e migrarmos para o SNMP gradativamente. Quanto a sua sugestão, não tenho a possibilidade de executar comandos através da ferramenta nova. Então é necessário que exista um script. Mas vou pensar a respeito. Att. Gabriel ________________________________ De: Otávio Fernandes Para: Cascavel Perl Mongers Enviadas: Quinta-feira, 18 de Fevereiro de 2010 17:22:57 Assunto: Re: [Cascavel-pm] Res: Problema com pipe 2010/2/18 Gabriel Sancinetti : > Alceu, > > O comando executado pode ser qualquer script da libexec do Nagios. > Em 99% dos casos check_nrpe ou check_nt. > > Pretendo monitorar hosts atualmente monitorados pelo nagios atráves de um > sistema proprietário. > A intenção é integrar o legado com o novo para que não seja necessário > "intervir" em hosts de clientes para instalação de um novo serviço de > monitoramento. > O novo sistema propriétário possui uma inteface em Perl para geração de > eventos. Então executo a linha de comando e manipulo o resultado no > script.para gerar ou limpar o evento no novo sistema. > > Para aqueles que não conhecem Nagios: Não existe a possibilidade do comando > não retornar resultado pois o comando já tem o próprio timeout. > > Quanto ao "ForkManager" foi a minha primeira tentativa sem sucesso. Não me > lembro por qual motivo o abandonei, mas com certeza está relacionado à > necessidade aguardar a execução de multiplos processos filhos e processar > seus resultados assincronamente. > Se é possível, eu não me lembro. > > Att. > > Gabriel Gabriel, O sistema proprietário vai ser um "wrapper" para o Nagios? Neste sistema não existe a possibilidade de usar SNMP diretamente? Porque, se você fizer um script, da forma como você nos descreveu, para integrar o sistema antigo e o novo, me parece muito mais com uma "gambiarra" do que com qualquer outra coisa. A minha sugestão para o seu caso, é fazer pequenos scripts que atuem como um "bind" para cada plugin do Nagios, no qual, o sistema novo informa qual host ele quer informações sobre. Assim você passa ao novo software o dever de trabalhar em paralelo, o que provavelmente ele já faz, afinal, é uma premissa para monitorar. Atenciosamente, -- Otávio Fernandes http://blog.emresumo.com _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From glasswalk3r em yahoo.com.br Thu Feb 18 16:04:40 2010 From: glasswalk3r em yahoo.com.br (Alceu R. de Freitas Jr.) Date: Thu, 18 Feb 2010 16:04:40 -0800 (PST) Subject: [Cascavel-pm] Res: Problema com pipe In-Reply-To: <67005.68247.qm@web65607.mail.ac4.yahoo.com> Message-ID: <790664.99909.qm@web30803.mail.mud.yahoo.com> --- Em qui, 18/2/10, Gabriel Sancinetti escreveu: > O comando executado pode ser qualquer script da libexec do > Nagios. > Em 99% dos casos check_nrpe ou check_nt. O Nagios não permite a escrita de plugins em Perl? Você não consegue desenvolver um plugin para o Nagios utilizando a funcionalidade de script em Perl de sua aplicação proprietária? > Quanto ao "ForkManager" foi a minha primeira > tentativa sem sucesso. Não me lembro por qual motivo o > abandonei, mas com certeza está relacionado à necessidade > aguardar a execução de multiplos processos filhos e > processar seus resultados assincronamente. > Se é possível, eu não me lembro. Eu não sou craque neste módulo, então não vou nem me atraver. Mas lembro do código que você enviou que você estava usando um pipe para saber o resultado dos processos filhos. Se os programas do Nagios sempre retornam uma resposta, você não poderia fazer com que os processos filhos atualizem seu status de execução escrevendo em arquivos texto? Ou então atualizando uma tabela de banco de dados com o resultado? Seu código está tentando utilizar o mesmo pipe para todos os processos? O que acontece se vários deles tentam fazer acesso simultâneo? Talvez você queira pesquisar sobre I/O assíncrono em Perl. O Perlbal faz uso de tal recurso com bastante sucesso. Abraços, Alceu ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com From gabrielssan em yahoo.com Thu Feb 18 17:14:52 2010 From: gabrielssan em yahoo.com (Gabriel Sancinetti) Date: Thu, 18 Feb 2010 17:14:52 -0800 (PST) Subject: [Cascavel-pm] Res: Res: Problema com pipe In-Reply-To: <790664.99909.qm@web30803.mail.mud.yahoo.com> References: <790664.99909.qm@web30803.mail.mud.yahoo.com> Message-ID: <871596.51980.qm@web65608.mail.ac4.yahoo.com> Alceu, Os plugins são o que eu quero aproveitar nos meus hosts remotos através do check_nrpe. Para fazer algo do tipo eu teria que refazer o "check_nrpe". Se houver algo nesse sentido já implementado talvez resolveria parte do meu problema, mas não a questão do tempo de execução do script. A solução sobre arquivos texto é umas das opções que posso seguir, pensei nela quando inseri um trace no processo filho escrevendo no mesmo arquivop de log que o processo pai. ( Estou tendendo para esse lado.) Sobre o pipe, a resposta é não. É criado um pipe para cada processo filho. Sua pergunta esta diretamente relacionada ao meu problema. Não sei qual a limitação de nível de SO que preciso controlar com maior cuidado. Os sleeps do código foram inseridos pensando no contexto de problema de bufferização nos pipes. Quando adiciono um sleep de 10 segundos (que é o timeout dos comandos) no processo pai antes de chamar cada filho a taxa de erro é quase nula. (1 a 5 erros entre mais de 2000 comandos processados) Mas coloquei todo tipo de log e de "eval" em de cada linha e nada de erro. Daí minha desconfiança no tratamendo do sinal ("USR1") que o processo filho envia ao pai para informar que terminou. Pois a lógica do script parte do princípio que a cada resposta de um processo filho, a váriável $gotone é incrementada. Aí vem a dúvida, será que os pipes estão OK e simplesmente o script não está incrementando a variável devido a acessos simultaneos e com isso o script interpreta que perdeu alguma resposta? Pior é que pelo visto vou ficar sem saber qual é o problema e partir para outra solução. ps: Antes que me questionem, meu servidor é muito bom. (QuadCore, 4GB, rodando CentOS 4.7 ). Att. Gabriel ________________________________ De: Alceu R. de Freitas Jr. Para: Cascavel Perl Mongers Enviadas: Quinta-feira, 18 de Fevereiro de 2010 22:04:40 Assunto: Re: [Cascavel-pm] Res: Problema com pipe --- Em qui, 18/2/10, Gabriel Sancinetti escreveu: > O comando executado pode ser qualquer script da libexec do > Nagios. > Em 99% dos casos check_nrpe ou check_nt. O Nagios não permite a escrita de plugins em Perl? Você não consegue desenvolver um plugin para o Nagios utilizando a funcionalidade de script em Perl de sua aplicação proprietária? > Quanto ao "ForkManager" foi a minha primeira > tentativa sem sucesso. Não me lembro por qual motivo o > abandonei, mas com certeza está relacionado à necessidade > aguardar a execução de multiplos processos filhos e > processar seus resultados assincronamente. > Se é possível, eu não me lembro. Eu não sou craque neste módulo, então não vou nem me atraver. Mas lembro do código que você enviou que você estava usando um pipe para saber o resultado dos processos filhos. Se os programas do Nagios sempre retornam uma resposta, você não poderia fazer com que os processos filhos atualizem seu status de execução escrevendo em arquivos texto? Ou então atualizando uma tabela de banco de dados com o resultado? Seu código está tentando utilizar o mesmo pipe para todos os processos? O que acontece se vários deles tentam fazer acesso simultâneo? Talvez você queira pesquisar sobre I/O assíncrono em Perl. O Perlbal faz uso de tal recurso com bastante sucesso. Abraços, Alceu ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From russoz em gmail.com Fri Feb 19 03:10:25 2010 From: russoz em gmail.com (Alexei Znamensky) Date: Fri, 19 Feb 2010 09:10:25 -0200 Subject: [Cascavel-pm] Res: Res: Problema com pipe In-Reply-To: <871596.51980.qm@web65608.mail.ac4.yahoo.com> References: <790664.99909.qm@web30803.mail.mud.yahoo.com> <871596.51980.qm@web65608.mail.ac4.yahoo.com> Message-ID: <23f46d7f1002190310v5524da8cy63aa602575054e89@mail.gmail.com> Gabriel, Recomendo você pesquisar exaustivamente a documentação do OS sobre pipes, buffers, etc. Esse tipo de rotinas, em perl (ou em qualquer outra linguagem, for that matter), geralmente são apenas wrappers para chamadas de sistema do próprio sistema operacional (no caso em Linux, isso É verdade). Assim, eu diria que há uma grande chance de que o seu problema esteja no nível do SO e não no nível da linguagem. []s, Alexei 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" 2010/2/18 Gabriel Sancinetti > Alceu, > > Os plugins são o que eu quero aproveitar nos meus hosts remotos através do > check_nrpe. > Para fazer algo do tipo eu teria que refazer o "check_nrpe". > Se houver algo nesse sentido já implementado talvez resolveria parte do meu > problema, mas não a questão do tempo de execução do script. > > A solução sobre arquivos texto é umas das opções que posso seguir, pensei > nela quando inseri um trace no processo filho escrevendo no mesmo arquivop > de log que o processo pai. ( Estou tendendo para esse lado.) > > Sobre o pipe, a resposta é não. É criado um pipe para cada processo filho. > Sua pergunta esta diretamente relacionada ao meu problema. > Não sei qual a limitação de nível de SO que preciso controlar com maior > cuidado. > Os sleeps do código foram inseridos pensando no contexto de problema de > bufferização nos pipes. > Quando adiciono um sleep de 10 segundos (que é o timeout dos comandos) no > processo pai antes de chamar cada filho a taxa de erro é quase nula. (1 a 5 > erros entre mais de 2000 comandos processados) > Mas coloquei todo tipo de log e de "eval" em de cada linha e nada de erro. > > Daí minha desconfiança no tratamendo do sinal ("USR1") que o processo filho > envia ao pai para informar que terminou. > Pois a lógica do script parte do princípio que a cada resposta de um > processo filho, a váriável $gotone é incrementada. > Aí vem a dúvida, será que os pipes estão OK e simplesmente o script não > está incrementando a variável devido a acessos simultaneos e com isso o > script interpreta que perdeu alguma resposta? > > Pior é que pelo visto vou ficar sem saber qual é o problema e partir para > outra solução. > > ps: Antes que me questionem, meu servidor é muito bom. (QuadCore, 4GB, > rodando CentOS 4.7 ). > > Att. > > Gabriel > > ------------------------------ > *De:* Alceu R. de Freitas Jr. > *Para:* Cascavel Perl Mongers > *Enviadas:* Quinta-feira, 18 de Fevereiro de 2010 22:04:40 > > *Assunto:* Re: [Cascavel-pm] Res: Problema com pipe > > > --- Em qui, 18/2/10, Gabriel Sancinetti escreveu: > > > O comando executado pode ser qualquer script da libexec do > > Nagios. > > Em 99% dos casos check_nrpe ou check_nt. > > O Nagios não permite a escrita de plugins em Perl? > > Você não consegue desenvolver um plugin para o Nagios utilizando a > funcionalidade de script em Perl de sua aplicação proprietária? > > > Quanto ao "ForkManager" foi a minha primeira > > tentativa sem sucesso. Não me lembro por qual motivo o > > abandonei, mas com certeza está relacionado à necessidade > > aguardar a execução de multiplos processos filhos e > > processar seus resultados assincronamente. > > Se é possível, eu não me lembro. > > Eu não sou craque neste módulo, então não vou nem me atraver. > > Mas lembro do código que você enviou que você estava usando um pipe para > saber o resultado dos processos filhos. Se os programas do Nagios sempre > retornam uma resposta, você não poderia fazer com que os processos filhos > atualizem seu status de execução escrevendo em arquivos texto? Ou então > atualizando uma tabela de banco de dados com o resultado? > > Seu código está tentando utilizar o mesmo pipe para todos os processos? O > que acontece se vários deles tentam fazer acesso simultâneo? > > Talvez você queira pesquisar sobre I/O assíncrono em Perl. O Perlbal faz > uso de tal recurso com bastante sucesso. > > Abraços, > Alceu > > > > ____________________________________________________________________________________ > Veja quais são os assuntos do momento no Yahoo! +Buscados > http://br.maisbuscados.yahoo.com > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > > ------------------------------ > Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10- > Celebridades- > Música- > Esportes > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From edencardim em gmail.com Fri Feb 19 06:52:56 2010 From: edencardim em gmail.com (Eden Cardim) Date: Fri, 19 Feb 2010 11:52:56 -0300 Subject: [Cascavel-pm] Res: Problema com pipe In-Reply-To: <754610.54269.qm@web65603.mail.ac4.yahoo.com> (Gabriel Sancinetti's message of "Thu, 18 Feb 2010 11:21:36 -0800 (PST)") References: <352314.90594.qm@web65610.mail.ac4.yahoo.com> <87bpfm7czm.fsf@janis.localdomain> <754610.54269.qm@web65603.mail.ac4.yahoo.com> Message-ID: <87635twa47.fsf@janis.localdomain> >>>>> "Gabriel" == Gabriel Sancinetti writes: Gabriel> Eden, Passei a tarde estudando esse AnyEvent::SubProcess. Gabriel> Mas infelizmente não encontrei muitos exemplos. Entendi Gabriel> como criar o processo filho, como redirecionar Gabriel> STDIN,STDOUT,STDERR, mas não como fazer o processo pai Gabriel> saber que todos filhos terminaram e onde ler o STDOUT dos Gabriel> filhos. Você tem alguma dica? Dica do dia: os testes da distribuição são os melhores lugares pra se encontrar exemplos. A propósito, o exemplo na sinopse do módulo mostra exatamente como fazer o que você quer. -- Eden Cardim Need help with your Catalyst or DBIx::Class project? Code Monkey http://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://edenc.vox.com/ http://www.shadowcat.co.uk/servers/ From gabrielssan em yahoo.com Fri Feb 19 10:04:59 2010 From: gabrielssan em yahoo.com (Gabriel Sancinetti) Date: Fri, 19 Feb 2010 10:04:59 -0800 (PST) Subject: [Cascavel-pm] Res: Res: Res: Problema com pipe In-Reply-To: <23f46d7f1002190310v5524da8cy63aa602575054e89@mail.gmail.com> References: <790664.99909.qm@web30803.mail.mud.yahoo.com> <871596.51980.qm@web65608.mail.ac4.yahoo.com> <23f46d7f1002190310v5524da8cy63aa602575054e89@mail.gmail.com> Message-ID: <408061.80536.qm@web65611.mail.ac4.yahoo.com> Alexei, A questão é que não vale o esforço. Ontem li um comentário em um forum que dizia que não é recomendado uso de pipes para scripts de execução paralela e assíncrona. Neste mesmo tópico foi recomendado o uso de Sockets. Já implementei outra solução hoje pela manhã e parece que vai atender as espectativas. Eu substibui a comunicação via pipe por Socket sem grandes impactos na estrutura do código. E para ser sincero ficou ridiculamente simples. Resumidamente, a alternativa que usei foi criar no processo pai um socket servidor "udp". Os filhos executam o comando e apenas enviam uma mensagem udp com resultado para o pai. Não é possível garantir a entrega das mensagens, mas a probabilidade de falhas é bem pequena. Mesmo assim meus logs irão me alertar nestes casos pois o controle de TIMEOUT foi mantido. (O processo pai espera receber a quantidade de mensagens igual ao número de processos filhos abertos). O problema é que se algum servidor/software de rede começar a porventura enviar mensagens para minha porta udp o script vai para o espaço. (Acho que vou colocar algum tipo de código na mensagem para validar se a mesma veio do meu processo filho). Enfim, ainda vou estressar essa solução e aviso a vocês se deu certo. Se tiverem algum alerta ou sugestão, enviem por favor. Abraços Att. Gabriel ________________________________ De: Alexei Znamensky Para: Cascavel Perl Mongers Enviadas: Sexta-feira, 19 de Fevereiro de 2010 9:10:25 Assunto: Re: [Cascavel-pm] Res: Res: Problema com pipe Gabriel, Recomendo você pesquisar exaustivamente a documentação do OS sobre pipes, buffers, etc. Esse tipo de rotinas, em perl (ou em qualquer outra linguagem, for that matter), geralmente são apenas wrappers para chamadas de sistema do próprio sistema operacional (no caso em Linux, isso É verdade). Assim, eu diria que há uma grande chance de que o seu problema esteja no nível do SO e não no nível da linguagem. []s, Alexei 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" 2010/2/18 Gabriel Sancinetti > >Alceu, > >Os plugins são o que eu quero aproveitar nos meus hosts remotos através do check_nrpe. > >Para fazer algo do tipo eu teria que refazer o "check_nrpe". >> >Se houver algo nesse sentido já implementado talvez resolveria parte do meu problema, mas não a questão do tempo de execução do script. > >A solução sobre arquivos texto é umas das opções que posso seguir, pensei nela quando inseri um trace no processo filho escrevendo no mesmo arquivop de log que o processo pai. ( Estou tendendo para esse lado.) > >Sobre o pipe, a resposta é não. É criado um pipe para cada processo filho. >Sua pergunta esta diretamente relacionada ao meu problema. >Não sei qual a limitação de nível de SO que preciso controlar com maior cuidado. >> >Os sleeps do código foram > inseridos pensando no contexto de problema de bufferização nos pipes. >Quando adiciono um sleep de 10 segundos (que é o timeout dos comandos) no processo pai antes de chamar cada filho a taxa de erro é quase nula. (1 a 5 erros entre mais de 2000 comandos processados) >> >Mas coloquei todo tipo de log e de "eval" em de cada linha e nada de erro. > >Daí minha desconfiança no tratamendo do sinal ("USR1") que o processo filho envia ao pai para informar que terminou. >> >Pois a lógica do script parte do princípio que a cada resposta de um processo filho, a váriável $gotone é incrementada. >Aí vem a dúvida, será que os pipes estão OK e simplesmente o script não está incrementando a variável devido a acessos simultaneos e com isso o script interpreta que perdeu alguma resposta? > >Pior é que pelo visto vou ficar sem saber qual é o problema e partir para outra solução. > >ps: Antes que me questionem, meu servidor é muito > bom. (QuadCore, 4GB, rodando CentOS 4.7 ). > >Att. > >Gabriel > > > >> ________________________________ De: Alceu R. de Freitas Jr. > >Para: Cascavel Perl Mongers >Enviadas: Quinta-feira, 18 de Fevereiro de 2010 22:04:40 >> >Assunto: Re: [Cascavel-pm] Res: Problema com pipe > > > >--- Em qui, 18/2/10, Gabriel Sancinetti escreveu: > >> O comando executado pode ser qualquer script da libexec do >> Nagios. > >> Em 99% dos casos check_nrpe ou check_nt. > >O Nagios não permite a escrita de plugins em Perl? > >Você não consegue desenvolver um plugin para o Nagios utilizando a funcionalidade de script em Perl de sua aplicação proprietária? > >> Quanto ao "ForkManager" foi a minha primeira >> tentativa sem sucesso. Não me lembro por qual motivo o >> abandonei, mas com certeza está relacionado à necessidade >> aguardar a execução de multiplos processos filhos e >> >> processar seus resultados assincronamente. >> Se é possível, eu não me lembro. > >Eu não sou craque neste módulo, então não vou nem me atraver. > >Mas lembro do código que você enviou que você estava usando um pipe para saber o resultado dos processos filhos. Se os programas do Nagios sempre retornam uma resposta, você não poderia fazer com que os processos filhos atualizem seu status de execução escrevendo em arquivos > texto? Ou então atualizando uma tabela de banco de dados com o resultado? > >Seu código está tentando utilizar o mesmo pipe para todos os processos? O que acontece se vários deles tentam fazer acesso simultâneo? > >Talvez você queira pesquisar sobre I/O assíncrono em Perl. O Perlbal faz uso de tal recurso com bastante sucesso. > >Abraços, >Alceu > > > ____________________________________________________________________________________ >> >Veja quais são os assuntos do momento no Yahoo! +Buscados >http://br.maisbuscados.yahoo.com >_______________________________________________ >Cascavel-pm mailing list >Cascavel-pm em pm.org >http://mail.pm.org/mailman/listinfo/cascavel-pm > >________________________________ >Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - Celebridades - Música - Esportes >_______________________________________________ >>Cascavel-pm mailing list >Cascavel-pm em pm.org >http://mail.pm.org/mailman/listinfo/cascavel-pm > ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From russoz em gmail.com Fri Feb 19 13:37:25 2010 From: russoz em gmail.com (Alexei Znamensky) Date: Fri, 19 Feb 2010 19:37:25 -0200 Subject: [Cascavel-pm] Res: Res: Res: Problema com pipe In-Reply-To: <408061.80536.qm@web65611.mail.ac4.yahoo.com> References: <790664.99909.qm@web30803.mail.mud.yahoo.com> <871596.51980.qm@web65608.mail.ac4.yahoo.com> <23f46d7f1002190310v5524da8cy63aa602575054e89@mail.gmail.com> <408061.80536.qm@web65611.mail.ac4.yahoo.com> Message-ID: <23f46d7f1002191337o1a8c047dxda8567a4112e93aa@mail.gmail.com> De qualquer maneira, vale a recomendação de ler a documentação do SO. As implementações de sockets de linguagens != C são, em sua maioria, apenas uma casca para as chamadas de sistema nativas do SO. Além disso, reforço a recomendação do Mantovani de ler a documentação de IPC, tanto a de perl, quanto relativas a Linux/UNIX (isso não mudou tanto assim nos últimos anos, pode ser documentação mais antiga que deve servir). E por fim, se os seus processos são estritamente locais - isto é, pai e filhos rodam na mesma máquina, sugiro fortemente que, ao invés de implementar usando sockets UDP, que implemente usando sockets UNIX, que são aqueles arquivos tipo "s" que você pode encontrar em alguns diretórios do seu sistema. No meu Ubuntu aqui, eu encontrei alguns em /var/run. Rode um "ls -l /var/run" que talvez você encontre alguns aí. A semântica dos sockets UNIX é similar, se não igual, à dos sockets TCP, com a vantagem de não precisar de número de porta. Você cria uma entrada no filesystem para isso. Boa sorte! []s, 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" 2010/2/19 Gabriel Sancinetti > Alexei, > > A questão é que não vale o esforço. > Ontem li um comentário em um forum que dizia que não é recomendado uso de > pipes para scripts de execução paralela e assíncrona. > Neste mesmo tópico foi recomendado o uso de Sockets. > > Já implementei outra solução hoje pela manhã e parece que vai atender as > espectativas. > Eu substibui a comunicação via pipe por Socket sem grandes impactos na > estrutura do código. > E para ser sincero ficou ridiculamente simples. > > Resumidamente, a alternativa que usei foi criar no processo pai um socket > servidor "udp". Os filhos executam o comando e apenas enviam uma mensagem > udp com resultado para o pai. > Não é possível garantir a entrega das mensagens, mas a probabilidade de > falhas é bem pequena. Mesmo assim meus logs irão me alertar nestes casos > pois o controle de TIMEOUT foi mantido. (O processo pai espera receber a > quantidade de mensagens igual ao número de processos filhos abertos). > > O problema é que se algum servidor/software de rede começar a porventura > enviar mensagens para minha porta udp o script vai para o espaço. (Acho que > vou colocar algum tipo de código na mensagem para validar se a mesma veio do > meu processo filho). > > Enfim, ainda vou estressar essa solução e aviso a vocês se deu certo. > Se tiverem algum alerta ou sugestão, enviem por favor. > > Abraços > > Att. > > Gabriel > > ------------------------------ > *De:* Alexei Znamensky > > *Para:* Cascavel Perl Mongers > *Enviadas:* Sexta-feira, 19 de Fevereiro de 2010 9:10:25 > *Assunto:* Re: [Cascavel-pm] Res: Res: Problema com pipe > > Gabriel, > > Recomendo você pesquisar exaustivamente a documentação do OS sobre pipes, > buffers, etc. Esse tipo de rotinas, em perl (ou em qualquer outra linguagem, > for that matter), geralmente são apenas wrappers para chamadas de sistema do > próprio sistema operacional (no caso em Linux, isso É verdade). Assim, eu > diria que há uma grande chance de que o seu problema esteja no nível do SO e > não no nível da linguagem. > > []s, > Alexei > > 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" > > > 2010/2/18 Gabriel Sancinetti > >> Alceu, >> >> Os plugins são o que eu quero aproveitar nos meus hosts remotos através do >> check_nrpe. >> Para fazer algo do tipo eu teria que refazer o "check_nrpe". >> Se houver algo nesse sentido já implementado talvez resolveria parte do >> meu problema, mas não a questão do tempo de execução do script. >> >> A solução sobre arquivos texto é umas das opções que posso seguir, pensei >> nela quando inseri um trace no processo filho escrevendo no mesmo arquivop >> de log que o processo pai. ( Estou tendendo para esse lado.) >> >> Sobre o pipe, a resposta é não. É criado um pipe para cada processo filho. >> Sua pergunta esta diretamente relacionada ao meu problema. >> Não sei qual a limitação de nível de SO que preciso controlar com maior >> cuidado. >> Os sleeps do código foram inseridos pensando no contexto de problema de >> bufferização nos pipes. >> Quando adiciono um sleep de 10 segundos (que é o timeout dos comandos) no >> processo pai antes de chamar cada filho a taxa de erro é quase nula. (1 a 5 >> erros entre mais de 2000 comandos processados) >> Mas coloquei todo tipo de log e de "eval" em de cada linha e nada de erro. >> >> Daí minha desconfiança no tratamendo do sinal ("USR1") que o processo >> filho envia ao pai para informar que terminou. >> Pois a lógica do script parte do princípio que a cada resposta de um >> processo filho, a váriável $gotone é incrementada. >> Aí vem a dúvida, será que os pipes estão OK e simplesmente o script não >> está incrementando a variável devido a acessos simultaneos e com isso o >> script interpreta que perdeu alguma resposta? >> >> Pior é que pelo visto vou ficar sem saber qual é o problema e partir para >> outra solução. >> >> ps: Antes que me questionem, meu servidor é muito bom. (QuadCore, 4GB, >> rodando CentOS 4.7 ). >> >> Att. >> >> Gabriel >> >> ------------------------------ >> *De:* Alceu R. de Freitas Jr. >> *Para:* Cascavel Perl Mongers >> *Enviadas:* Quinta-feira, 18 de Fevereiro de 2010 22:04:40 >> >> *Assunto:* Re: [Cascavel-pm] Res: Problema com pipe >> >> >> --- Em qui, 18/2/10, Gabriel Sancinetti escreveu: >> >> > O comando executado pode ser qualquer script da libexec do >> > Nagios. >> > Em 99% dos casos check_nrpe ou check_nt. >> >> O Nagios não permite a escrita de plugins em Perl? >> >> Você não consegue desenvolver um plugin para o Nagios utilizando a >> funcionalidade de script em Perl de sua aplicação proprietária? >> >> > Quanto ao "ForkManager" foi a minha primeira >> > tentativa sem sucesso. Não me lembro por qual motivo o >> > abandonei, mas com certeza está relacionado à necessidade >> > aguardar a execução de multiplos processos filhos e >> > processar seus resultados assincronamente. >> > Se é possível, eu não me lembro. >> >> Eu não sou craque neste módulo, então não vou nem me atraver. >> >> Mas lembro do código que você enviou que você estava usando um pipe para >> saber o resultado dos processos filhos. Se os programas do Nagios sempre >> retornam uma resposta, você não poderia fazer com que os processos filhos >> atualizem seu status de execução escrevendo em arquivos texto? Ou então >> atualizando uma tabela de banco de dados com o resultado? >> >> Seu código está tentando utilizar o mesmo pipe para todos os processos? O >> que acontece se vários deles tentam fazer acesso simultâneo? >> >> Talvez você queira pesquisar sobre I/O assíncrono em Perl. O Perlbal faz >> uso de tal recurso com bastante sucesso. >> >> Abraços, >> Alceu >> >> >> >> ____________________________________________________________________________________ >> Veja quais são os assuntos do momento no Yahoo! +Buscados >> http://br.maisbuscados.yahoo.com >> _______________________________________________ >> Cascavel-pm mailing list >> Cascavel-pm em pm.org >> http://mail.pm.org/mailman/listinfo/cascavel-pm >> >> ------------------------------ >> Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10- >> Celebridades- >> Música- >> Esportes >> >> _______________________________________________ >> Cascavel-pm mailing list >> Cascavel-pm em pm.org >> http://mail.pm.org/mailman/listinfo/cascavel-pm >> > > > ------------------------------ > Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10- > Celebridades- > Música- > Esportes > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: