<div dir="ltr"><div>Agustinho,<br><br>Você precisa ler as coisas com mais cuidado. Se você leu sobre o exec() antes de tentar, deveria saber que ele jamais iria funcionar, pois (de novo) A FUNÇÃO JAMAIS RETORNA.<br><br>Sobre o system(), I quote (<a href="http://perldoc.perl.org/functions/system.html">http://perldoc.perl.org/functions/system.html</a>): <br>
<br></div>Note that argument processing varies depending on the
number of arguments.  If there is more than one argument in LIST,
or if LIST is an array with more than one value, starts the program
given by the first element of the list with arguments given by the
rest of the list.  If there is only one scalar argument, the argument
is checked for shell metacharacters, and if there are any, the
entire argument is passed to the system&#39;s command shell for parsing
(this is <code class="inline">/bin/sh -c</code> on Unix platforms, but varies on other
platforms).  If there are no shell metacharacters in the argument,
it is split into words and passed directly to <code class="inline"><span class="w">execvp</span></code>
, which is
more efficient.<br><div><br>Aparentemente você não manja muito de como funcionam as coisas. Então o tio vai explicar pra você:<br><br>my @ping = (&quot;ping&quot; , &quot;-c4&quot; , &quot;<a href="http://192.168.0.222/" target="_blank">192.168.0.222</a>&quot; , &quot; &quot; , &quot;\&gt;&quot; , &quot; &quot; ,
&quot;/dev/null\&gt;2\&amp;1&quot;);<br><br>Seguindo o que está escrito ali em cima, você está chamando ping com 6 argumentos:<br><br>0 &quot;-c4&quot;<br>1 &quot;<a href="http://192.168.0.222/" target="_blank">192.168.0.222</a>&quot;<br>
2 &quot; &quot;<br>3 &quot;\&gt;&quot;<br>4 &quot; &quot;<br>5 &quot;/dev/null\&gt;2\&amp;1&quot;<br><br>dos quais o ping consegue trabalhar (utilmente) apenas #0 e #1. Os #2 e #4 são ignorados. O arg #3 é um erro, o ping não sabe o que fazer com isso, mas provavelmente ele está sendo bonzinho e deixando passar. O #5 é o mais engraçado de todos, pois começa com um nome de arquivo, depois caracteres especiais, no wonder o perl dá host unknown.<br>
<br>Quem interpreta os caracteres especiais da linha de comando, em particular os de redirecionamento ( &gt; &lt; &gt;&amp; ) é o SHELL (seja ele sh, ksh, bash, csh, tcsh, etc...), e não os programas que são invocados. Aqui é um diferença básica de design entre windows/dos e unix: no império do mal, cada comando é responsável por expandir os caracteres especiais na linha de comando, não sei se todos, mas pelo menos * e ?.<br>
<br>Ou seja, se você não tiver um shell sendo rodado, você não tem redirecionamento. Pelo perlpod de system(), você NÃO TEM um shell sendo invocado quando você passa uma lista de parâmetros. Se você quiser ter redirecionamento, tem de passar tudo como uma coisa só:<br>
<br>my $cmd = &quot;ping -c4 <a href="http://192.168.0.222/" target="_blank">192.168.0.222</a> \&gt;/dev/null&nbsp; \&gt;2\&amp;1&quot;;<br>system($cmd);<br><br>pois, de acordo com a semântica do system(), sendo invocada com apenas um parâmetro, esta função irá chamar o shell (/bin/sh -c no caso do Unix). De qualquer maneira, é um jeito bem tosco e pouco portável de verificar se o host está up.<br>
<br>Sugestões de leitura:<br><br><a href="http://search.cpan.org/~ferreira/Shell-0.72/Shell.pm">http://search.cpan.org/~ferreira/Shell-0.72/Shell.pm</a><br><a href="http://search.cpan.org/~chorny/Net-Ping-External-0.12/External.pm">http://search.cpan.org/~chorny/Net-Ping-External-0.12/External.pm</a><br>
<a href="http://search.cpan.org/~rcaputo/POE-Component-Client-Ping-1.14/Ping.pm">http://search.cpan.org/~rcaputo/POE-Component-Client-Ping-1.14/Ping.pm</a><br><br>HTH<br><br>Cheers,<br>Russo<br><br><div class="gmail_quote">
2008/8/12 Agustinho Coelho <span dir="ltr">&lt;<a href="mailto:agustinho_coelho@yahoo.com.br">agustinho_coelho@yahoo.com.br</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 bgcolor="#ffffff" text="#000000">
<br>
<blockquote type="cite">RTFM:<div class="Ih2E3d"><br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec LIST<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec PROGRAM LIST<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The &quot;exec&quot; function executes a system command and never
returns-- use &quot;system&quot; instead of &quot;exec&quot; if you<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; want it to return.&nbsp; It fails and returns false only if
the command does not exist and it is executed<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directly instead of via your system&#39;s command shell (see
below).<br>
  <br></div>
[]s,<br>
Russo</blockquote>
<br>
Russo,<br>
<br>
Eu li o manual e já tinha tentado antes do exec() usar o system() de
diversas maneiras mas sem conseguir o efeito desejado. Achava que
justamente por não retornar uma saída ele fosse mais simples. Segue o
código como estava com o system() (seguindo exemplo do próprio perldoc):<br>
<br>
#/usr/bin/perl -w<br>
<br>
use strict;<br>
use warnings;<br>
<br>
my @ping = (&quot;ping&quot; , &quot;-c4&quot; , &quot;<a href="http://192.168.0.222" target="_blank">192.168.0.222</a>&quot; , &quot; &quot; , &quot;\&gt;&quot; , &quot; &quot; ,
&quot;/dev/null\&gt;2\&amp;1&quot;);<br>
my @mailup = (&quot;sendmail&quot; , &quot;-f&quot; , <a href="mailto:user%5C@host.com.br" target="_blank">&quot;user\@host.com.br&quot;</a> , &quot;-t&quot; ,
<a href="mailto:user%5C@host.com.br" target="_blank">&quot;user\@host.com.br&quot;</a> , &quot; &quot; , &quot;\&lt;&quot; , &quot; &quot; ,
&quot;/home/bkpuser/netmailup.txt&quot;);<br>
my @maildown = (&quot;sendmail&quot; , &quot;-f&quot; , <a href="mailto:user%5C@host.com.br" target="_blank">&quot;user\@host.com.br&quot;</a> , &quot;-t&quot; ,
<a href="mailto:user%5C@host.com.br" target="_blank">&quot;user\@host.com.br&quot;</a> , &quot; &quot; , &quot;\&lt;&quot; , &quot; &quot; ,
&quot;/home/bkpuser/netmaildown.txt&quot;);<br>
<br>
system (@ping);<br>
<br>
if ( $? == 0 ) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; system (@mailup);<br>
} else {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; system (@maildown);<br>
}<br>
<br>
Eu tentei escapar todos os caracteres duvidosos, tentei interpolar de
várias maneiras, mas sem sucesso algum. Ele sempre apresenta os
seguintes erros: <br>
<b>sh: 1: command not found</b> ou <b>ping: unknown host &gt;<br>
</b><div class="Ih2E3d">
<blockquote type="cite">Agustinho,
  <br>
  <br>
Verifique se o &#39;script&#39; esteja encontrando o comando &#39;mail&#39;, passe o
caminho completo do
  <br>
comando, como por exemplo &#39;/usr/bin/mail&#39;, e verifique se está
funcionando na linha de
  <br>
comando também.
  <br>
  <br>
Para não depender da tua máquina, que pode ter outros problemas,
utilize o Mail::Sender,
  <br>
segue um exemplo:
  <br>
  <br>
my $sender = new Mail::Sender { smtp =&gt; &#39;<a href="http://mail.servidor.com.br" target="_blank">mail.servidor.com.br</a>&#39;,
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from =&gt; &#39;Alerta <a href="mailto:naoresponder@servidor.com.br" target="_blank">&lt;naoresponder@servidor.com.br&gt;</a>&#39;,
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth =&gt; &#39;LOGIN&#39;,
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; authid =&gt; &#39;<a href="mailto:alerta@servidor.com.br" target="_blank">alerta@servidor.com.br</a>&#39;,
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; authpwd =&gt; &#39;senha_do_usuario_alerta&#39;,
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; headers =&gt; &quot;MIME-Version:
1.0\r\nContent-type: text/html\r\nContent-Transfer-Encoding: 7bit&quot;
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };
  <br>
  <br>
if (ref ($sender-&gt;MailMsg( { to=&gt; <a href="mailto:voce@servidor.com.br" target="_blank">&quot;voce@servidor.com.br&quot;</a>,
subject =&gt; &quot;Titulo&quot;, msg =&gt; &quot;Mensagem&quot;,&nbsp;&nbsp; }) {
  <br>
&nbsp;print &quot;Alerta enviado.&quot;;
  <br>
}
  <br>
  <br>
Abs,
  <br>
-Thiago Rondon
</blockquote>
<br></div>
Tiago,<br>
<br>
Valeu pela ajuda cara, mas eu já tinha tentando o Mail:Sender (é que eu
acabei colocando o nome dos módulos do debian + libemail-send-perl +).
Mas não tinha entendido direito, com o exemplo que você deu ficou um
pouco mais claro, mais ainda preciso realizar o ping para verificação
do host. :)<div class="Ih2E3d"><br>
<br>
<br>
<blockquote type="cite">Reforço a idéia do Champs. Mesmo que seja mais
rápido mandar emails dessa forma (o que pode não ser o caso) você vai
abrir brechas de segurança.
  <br>
  <br>
Escrevi um artigo a um bom tempo atrás no <a href="http://www.perl.org.br" target="_blank">http://www.perl.org.br</a>
sobre esse assunto. Dê uma olhada lá.
  <br>
  <br>
[]&#39;s
  <br>
  <br>
  <span>--&nbsp;<br>
  </span>Alceu Rodrigues de Freitas Junior
  <br>
---
  <br>
  <a href="mailto:glasswalk3r@yahoo.com.br" target="_blank">glasswalk3r@yahoo.com.br</a>
  <br>
&quot;when you don&#39;t create things, you become defined by your tastes
rather than ability. Your tastes only narrow and exclude people. So
create.&quot;
</blockquote>
<br></div>
Alceu,<br>
<br>
Eu procurei pelos seus artigos (inclusive li alguns para iniciantes -
eu - e achei muitas coisas boas) mas não encontrei especificamente este
que trata sobre emails. Em que caso especificamente você diz que tem
brechas?<br>
<br>
<br>
Mais uma vez obrigado a todos!<br>
<br>
</div>

<br>_______________________________________________<br>
Cascavel-pm mailing list<br>
<a href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></blockquote></div><br><br clear="all"><br>-- <br>Alexei Znamensky [russoz_gmail_com] [<a href="http://russoz.wordpress.com">russoz.wordpress.com</a>] [<a href="http://www.flickr.com/photos/alexeiz">www.flickr.com/photos/alexeiz</a>]<br>
&quot;Though we live in trying times, we&#39;re the ones who have to try&quot;<br>
</div></div>