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.