Flávio,<br><br>Ainda não deu uma olhada no resto do teu código, mas o primeiro ponto que chama a atenção é você utilizar o map para fazer o loop. No passado isto já foi muito mais grave, mas o fato é que o map não é para fazer este tipo de loop.<br>
<br>A melhor alternativa seria utilizar o while ou o for, tipo :<br><br><span style="font-family: courier new,monospace;"><codigo></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">$ping = Net::Ping->new("tcp", 22);</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">while ( my $server = key %servidores ) {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> if (! $ping->ping($server, 2) ) {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> # faça alguma coisa e vá para o próximo elemento</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> next</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> }</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> if ( $obj->exec( { src => $_ . ':/path/de/origem', dest => $servidor{$_} } ) ) {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> log_info("sincronização com o servidor $server ocorreu com sucesso") </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> else {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> log_error("sincronização com o servidor $server terminou com erros " . $obj->status . ". A saida de erro é : " . $obj->err );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> }</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">} </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"></codigo></span><br>
<br>Lembrando que o código acima é apenas um exemplo. Eu recomendo fortemente que você pense numa formatação do log que seja fácil a automação da análise do mesmo. No equinócio passado eu escrevi sobre isto (<a href="http://sao-paulo.pm.org/artigo/2010/LogApplicacao">http://sao-paulo.pm.org/artigo/2010/LogApplicacao</a>).<br>
<br>Abraços,<br><br>Solli M. Honório<br style="font-family: courier new,monospace;"><br><div class="gmail_quote">Em 17 de setembro de 2010 08:44, "Flávio R. Lopes" <span dir="ltr"><<a href="mailto:flavio.lopes@links.inf.br">flavio.lopes@links.inf.br</a>></span> escreveu:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Em 17-09-2010 05:59, Otávio Fernandes escreveu:<div><div></div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
2010/9/17 "Flávio R. Lopes"<<a href="mailto:flavio.lopes@links.inf.br" target="_blank">flavio.lopes@links.inf.br</a>>:<br>
<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Olá pessoal.<br>
<br>
Fiz um programinha que sincroniza diretórios entre servidores. Como são<br>
vários servidores, gostaria de gerar tipo de um "log" que irá me mostrar<br>
quais as conexões (transferências) que deram certo e quais falharam.<br>
Por exemplo, gostaria de gerar um arquivo de log que me mostrasse mais ou<br>
menos o seguinte:<br>
<br>
Servidor server1 => Transferência Ok<br>
Servidor server2 => Transferência Ok<br>
Servidor server3 => Falhou<br>
(and so on...)<br>
<br>
O script é este: git://<a href="http://gist.github.com/583692.git" target="_blank">gist.github.com/583692.git</a><br>
<br>
Tentei jogar esta parte (abaixo) dentro de um "if", mas não funcionou:<br>
map {<br>
$obj->exec( { src => $_ . ':/path/de/origem', dest => $servidor{$_} } )<br>
or warn "A transferencia falhou!\n"<br>
} keys %servidor;<br>
<br>
<br>
Uma outra dúvida minha é a seguinte: Como eu usei a função "map" para tratar<br>
os elementos do meu Hash, quando eu disparo o script, ele automaticamente<br>
tenta fazer a conexão com TODOS os servidores listados dentro do Hash de uma<br>
única vez, ou seja, ele vai abrir tantas conexões quantas estiverem listadas<br>
no Hash. Constatei isto usando o "netstat -n"<br>
<br>
Daria para fazer um controle, tipo, só abrir uma conexão, quando uma outra<br>
for finalizada? Imaginei também testar a conexão, ou seja, pode ser que um<br>
determinado server não esteja "no ar"...<br>
<br>
Vocês podem me dar uma dica?<br>
<br>
Abraço,<br>
Flávio<br>
<br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
<br>
</blockquote>
Flávio,<br>
<br>
Não faz muito sentido ele abrir conexões antes de terminar a última, visto que<br>
o "map" está fazendo uma chamada síncrona para o File::Rsync.<br>
<br>
Você tem certeza de que isso está vindo do seu script?<br>
<br>
</blockquote></div></div>
Olá Otávio.<br>
Bem, não sei ao certo, pois dei o comando "netstat -n" antes de disparar o script e não apareciam as conexões com os servidores remotos. Realmente não são listados todos os servidores, porém, como ainda estou testando o script, em alguns servidores ainda não tinham dados para sincronizar e em outros haviam. Vou refazer os testes aqui.<br>
E quanto a geração de logs, você poderia me sugerir alguma coisa?<br>
<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
um abraço,<br>
<br>
<br>
</blockquote><div><div></div><div class="h5">
<br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>"o animal satisfeito dorme". - Guimarães Rosa<br>