<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt">Alexei,<br><br>A questão é que não vale o esforço.<br>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.<br>Neste mesmo tópico foi recomendado o uso de Sockets.<br><br>Já implementei outra solução hoje pela manhã e parece que vai atender as espectativas.<br>Eu substibui a comunicação via pipe por Socket sem grandes impactos na estrutura do código.<br>E para ser sincero ficou ridiculamente simples.<br><br>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.<br>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).<br><br>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).<br><br>Enfim, ainda vou estressar essa solução e aviso a vocês se deu certo.<br>Se tiverem algum alerta ou sugestão, enviem por favor.<br><br>Abraços<br><br>Att.<br><br>Gabriel<br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><font face="Tahoma" size="2"><hr size="1"><b><span style="font-weight: bold;">De:</span></b> Alexei Znamensky &lt;russoz@gmail.com&gt;<br><b><span style="font-weight: bold;">Para:</span></b>
 Cascavel Perl Mongers &lt;cascavel-pm@pm.org&gt;<br><b><span style="font-weight: bold;">Enviadas:</span></b> Sexta-feira, 19 de Fevereiro de 2010 9:10:25<br><b><span style="font-weight: bold;">Assunto:</span></b> Re: [Cascavel-pm] Res: Res: Problema com pipe<br></font><br>Gabriel,<div><br></div><div>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.</div>

<div><br></div><div>[]s,</div><div>Alexei</div><div><br clear="all">Alexei Znamensky [russoz_gmail_com] [<a rel="nofollow" target="_blank" href="http://russoz.wordpress.com">russoz.wordpress.com</a>] [<a rel="nofollow" target="_blank" href="http://www.flickr.com/photos/alexeiz">www.flickr.com/photos/alexeiz</a>]<br>

"Though we live in trying times, we're the ones who have to try"<br>
<br><br><div class="gmail_quote">2010/2/18 Gabriel Sancinetti <span dir="ltr">&lt;<a rel="nofollow" ymailto="mailto:gabrielssan@yahoo.com" target="_blank" href="mailto:gabrielssan@yahoo.com">gabrielssan@yahoo.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">Alceu,<br><br>Os plugins são o que eu quero aproveitar nos meus hosts remotos através do check_nrpe.<br><div>Para fazer algo do tipo eu teria que refazer o "check_nrpe".<br>

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.<br><br>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.)<br>

<br>Sobre o pipe, a resposta é não. É criado um pipe para cada processo filho.<br>Sua pergunta esta diretamente relacionada ao meu problema.<br>Não sei qual a limitação de nível de SO que preciso controlar com maior cuidado.<br>

Os sleeps do código foram
 inseridos pensando no contexto de problema de bufferização nos pipes.<br>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)<br>

Mas coloquei todo tipo de log e de "eval" em de cada linha e nada de erro.<br><br>Daí minha desconfiança no tratamendo do sinal ("USR1") que o processo filho envia ao pai para informar que terminou. <br>

Pois a lógica do script parte do princípio que a cada resposta de um processo filho, a váriável $gotone é incrementada. <br>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?<br>

<br>Pior é que pelo visto vou ficar sem saber qual é o problema e partir para outra solução.<br><br>ps: Antes que me questionem, meu servidor é muito
 bom. (QuadCore, 4GB, rodando CentOS 4.7 ).<br><br>Att.<br><br>Gabriel<br></div><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><br><div style="font-family: arial,helvetica,sans-serif; font-size: 13px;">

<font face="Tahoma" size="2"><div class="im"><hr size="1"><b><span style="font-weight: bold;">De:</span></b> Alceu R. de Freitas Jr. &lt;<a rel="nofollow" ymailto="mailto:glasswalk3r@yahoo.com.br" target="_blank" href="mailto:glasswalk3r@yahoo.com.br">glasswalk3r@yahoo.com.br</a>&gt;<br>

</div><div class="im"><b><span style="font-weight: bold;">Para:</span></b> Cascavel Perl Mongers &lt;<a rel="nofollow" ymailto="mailto:cascavel-pm@pm.org" target="_blank" href="mailto:cascavel-pm@pm.org">cascavel-pm@pm.org</a>&gt;<br></div><b><span style="font-weight: bold;">Enviadas:</span></b> Quinta-feira, 18 de Fevereiro de 2010 22:04:40<div class="im">

<br><b><span style="font-weight: bold;">Assunto:</span></b> Re: [Cascavel-pm] Res:  Problema com pipe<br></div></font><br><div class="im"><br>--- Em qui, 18/2/10, Gabriel Sancinetti &lt;<a rel="nofollow" ymailto="mailto:gabrielssan@yahoo.com" target="_blank" href="mailto:gabrielssan@yahoo.com">gabrielssan@yahoo.com</a>&gt; escreveu:<br>

<br>&gt; O comando executado pode ser qualquer script da libexec do<br>&gt; Nagios.
 <br>&gt; Em 99% dos casos check_nrpe ou check_nt.<br><br>O Nagios não permite a escrita de plugins em Perl?<br><br>Você não consegue desenvolver um plugin para o Nagios utilizando a funcionalidade de script em Perl de sua aplicação proprietária?<br>

 <br>&gt; Quanto ao "ForkManager" foi a minha primeira<br>&gt; tentativa sem sucesso. Não me lembro por qual motivo o<br>&gt; abandonei, mas com certeza está relacionado à necessidade<br>&gt; aguardar a execução de multiplos processos filhos e<br>

&gt; processar seus resultados assincronamente.<br>&gt; Se é possível, eu não me lembro.<br><br>Eu não sou craque neste módulo, então não vou nem me atraver.<br><br>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?<br><br>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?<br>

<br>Talvez você queira pesquisar sobre I/O assíncrono em Perl. O Perlbal faz uso de tal recurso com bastante sucesso.<br><br>Abraços,<br>Alceu<br><br><br>&nbsp; &nbsp; &nbsp; ____________________________________________________________________________________<br>

Veja quais são os assuntos do momento no Yahoo! +Buscados<br><a rel="nofollow" target="_blank" href="http://br.maisbuscados.yahoo.com">http://br.maisbuscados.yahoo.com</a><br>_______________________________________________<br>Cascavel-pm mailing list<br>

<a rel="nofollow" ymailto="mailto:Cascavel-pm@pm.org" target="_blank" href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br><a rel="nofollow" target="_blank" href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></div></div></div>


</div><br>


      <hr size="1"><div class="im">Veja quais são os assuntos do momento no Yahoo! + Buscados: <a rel="nofollow" target="_blank" href="http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/">Top 10</a> - <a rel="nofollow" target="_blank" href="http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/celebridades/">Celebridades</a> - <a rel="nofollow" target="_blank" href="http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/m%C3%BAsica/">Música</a> - <a rel="nofollow" target="_blank" href="http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/esportes/">Esportes</a></div>

</div><br>_______________________________________________<br>
Cascavel-pm mailing list<br>
<a rel="nofollow" ymailto="mailto:Cascavel-pm@pm.org" target="_blank" href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br>
<a rel="nofollow" target="_blank" href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></blockquote></div><br></div>
</div></div>
</div><br>


      <hr size=1>Veja quais são os assuntos do momento no Yahoo! + Buscados: <a href="http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/">Top 10</a> - <a href="http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/celebridades/">Celebridades</a> - <a href="http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/m%C3%BAsica/">Música</a> - <a href="http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/esportes/">Esportes</a></body></html>