Como obtenho o comando nc para terminar após 2 segundos? [duplicado]

2

Eu tenho que escrever um script de manutenção que itera sobre nossos IPs testando sua conectividade com certos serviços, como nc -sip# mailin-01.mx.aol.com 25 .

Ele tem uma bandeira -w ... , mas não é o que eu acho que é. Ou seja, eu só quero que este programa seja executado em no máximo 3 segundos e os lugares aos quais estamos nos conectando estejam sempre ativos (a menos que grandes problemas de rede com os quais o script não deveria se preocupar - não seu trabalho específico e seriam notados antes o script é executado).

Só preciso conectá-lo e ver se estamos recebendo uma mensagem de erro. Isso é necessário antes de atribuirmos um IP a um usuário para sua página da Web (essa é uma alternativa ao material do CPanel - queremos o nosso próprio).

    
por Arian 20.10.2013 / 05:04

2 respostas

1

A maneira mais simples de fazer isso é com o comando timeout . O comando timeout permite que você execute um comando especificado e, se esse comando não sair do próprio, dentro de um determinado tempo limite, timeout o mata.

Por exemplo

# timeout 3 sleep 1; echo exit=$? 
exit=0

# timeout 3 sleep 5; echo exit=$?
exit=124

# timeout 3 nc google.com 80; echo exit=$?
nc: using stream socket
exit=124

timeout não está definido no padrão POSIX, portanto, não é garantido que ele esteja em todos os lugares, mas parece ser predominante.

    
por 20.10.2013 / 06:21
1

link

isso funcionou

#!/bin/bash

cmd=$1
seconds=$2

echo "Executing: ${cmd} for $seconds seconds"
$cmd&

cmdpid=$!
sleep $seconds

if [ -d /proc/$cmdpid ]
then
echo "terminating program PID:$cmdpid"
kill $cmdpid
fi
    
por 20.10.2013 / 06:08