[Cascavel-pm] Comandos externos

Luis Campos de Carvalho monsieur_champs em yahoo.com.br
Sexta Dezembro 23 09:23:56 PST 2005


--- Paulo Ricardo <paulo.ricardo em expresso.com.br> escreveu:
> Bom dia pessoal.
> 
>  Para executar um comando comando externo gerando 
> um retorno deve ser usado SYSTEM caso contrário, 
> deverá ser usado o EXEC, correto?

  DEPENDE. ;-)
  Na maior parte das vezes, sim.

>  Bem, o comando no meu caso, seria desta forma:
> 
>  system("svc -dx /var/qmail/supervise/smtp/");

  Ahhhh!!! Aspas duplas num comando é problema sério!
  Tente por favor usar aspas simples, ou o operador "q":

  system q{/caminho/para/o/svc -dx /var/qmail/supervise/smtp/};

  Vai funcionar do mesmo jeito e impede que seu programa seja sacaneado com alterações (simples)
em variáveis de ambiente e coisas do gênero...

>  A minha dúvida é: Qual procedimento de verificação 
> do retorno deste comando dado acima.
>  Em algumas linguagens seria desta forma.
>  if (!system("svc -dx /var/qmail/supervise/smtp/")){
>    # NÃO RETORNA
>  } else {
>    # RETORNA
>  }

  Existe uma dica sobre isso na manpage do system, se eu não me engano. Tente "perldoc -f system".
Em particular, acho que isso aqui ajuda:

  # $? é o resultado de retorno de um "system()"
  if ($? == -1) {
      print "failed to execute: $!\n";
  } elsif ($? & 127) {
      printf "child died with signal %d, %s coredump\n",
          ($? & 127),  ($? & 128) ? 'with' : 'without';
  } else {
      printf "child exited with value %d\n", $? >> 8;
  }

>  Outra questão. Este comando 
> ( system("svstat /var/qmail/supervise/smtp/"))
> verifica no qmail a quantidade em segundos que 
> um respectivo serviço esta esta ligado, que no 
> caso, seria o  serviço smtp.
>  No konsole, o comando dado acima retorna o 
> seguinte:
>
>     up (pid 2096) 1170 seconds
>
>  Eu preciso coletar este 1170. Alguma dica?

  Você pode usar assim:

  my ( $seconds ) =
    `/caminho/para/svstat /var/qmail/supervise/smtp`
      =~ m/(\d+)\s+seconds?\s*$/o;

  E isso deve colocar na sua variável $seconds o valor esperado (neste exemplo, 1170).

  Espero que isso ajude.
  Putamplexos!

--
Luis Campos de Carvalho
Member of "São Paulo Perl Mongers",
Unix SysAdmin & OCP/DBA Oracle


	



	
		
_______________________________________________________ 
Yahoo! doce lar. Faça do Yahoo! sua homepage. 
http://br.yahoo.com/homepageset.html 



Mais detalhes sobre a lista de discussão Cascavel-pm