Como posso executar um comando arbitrário quando o ping é concluído?

0

Como posso construir um comando para executar ping em um host a cada minuto ou algo assim e, em seguida, executar um comando quando ele não atingir o tempo limite (quando o host com ping ficar online)?

Basicamente, quero o seguinte pseudocódigo:

bool ping = pingHost();
while (ping = false) {
    //try again
    ping = pingHost();
}
runCommand("whatever");

De preferência, as respostas incluiriam instruções para sistemas semelhantes ao UNIX (usando bash, etc), bem como sistemas Windows (cmd, PowerShell ou Cygwin todo o trabalho).

    
por strugee 17.05.2013 / 20:34

1 resposta

4

Primeiro de tudo, por favor, deixe-me salientar que você provavelmente iria querer usar um software de monitoramento mais completo, como Nagios para isso.

Para a solução básica de script, no Linux eu usaria o Bash para isso:

#!/bin/bash
ping -c 1 yourhost.com
if [ $? -eq 0 ]; then
    your_command
fi

O Windows é bastante semelhante, na verdade. Coloque isso em um arquivo .bat :

ping -n 1 yourhost.com
IF %ERRORLEVEL%==0 (
    your_command
)

Explicação: o comando ping retorna um código de saída nos dois sistemas operacionais. No Linux (Bash) você tem a variável $? para obter este código de saída, no Windows é %errorlevel% . Quando o ping é bem-sucedido, o código de saída em ambos os sistemas operacionais é 0, caso contrário, é 1. Esse valor pode ser usado para executar seu comando condicionalmente.

Adicionando o loop:

No Linux:

#!/bin/bash
result=1
while [ $result -neq 0 ]; do
    ping -c 1 yourhost.com
    result=$?
done

No Windows, o mesmo seria:

:loop
ping -n 1 yourhost.com
IF NOT %ERRORLEVEL%==0 (
    goto loop
)
your_command

Observação: Se você quiser usá-lo toda vez que o host estiver on-line, você poderá usar o crontab no Linux ou o Agendador de Tarefas no Windows. Se você quiser executá-lo toda vez que o host ficar on-line, será necessário um software de monitoramento adequado.

    
por 17.05.2013 / 22:09