Как я могу создать команду для проверки связи с хостом каждую минуту или что-то в этом роде, а затем выполнить команду, когда время ожидания не истекло (когда хост с эхо-запросом подключается)?

В основном я хочу следующий псевдокод:

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

Предпочтительно, чтобы ответы включали инструкции для UNIX-подобных систем (с использованием bash и т.д.), А также для систем Windows (cmd, PowerShell или Cygwin - все работает).

1 ответ1

4

Прежде всего, позвольте мне отметить, что вы, вероятно, захотите использовать для этого более полное программное обеспечение для мониторинга, такое как Nagios .

Для базового скриптового решения в Linux я бы использовал Bash для этого:

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

Windows довольно похожа на самом деле. Поместите это в файл .bat :

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

Объяснение: команда ping возвращает код завершения в обеих операционных системах. В Linux (Bash) у вас есть $? переменная, чтобы получить этот код выхода, в Windows это %errorlevel% . Когда эхо-запрос успешен, код выхода в обеих операционных системах равен 0, в противном случае - 1. Это значение можно использовать для условного запуска вашей команды.

Добавление цикла:

В Linux:

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

На Windows то же самое будет:

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

Примечание: Если вы хотите использовать его каждый раз, когда хост находится в сети, вы можете использовать crontab в Linux или планировщик задач в Windows. Если вы хотите запускать его каждый раз, когда хост подключается к сети, вам необходимо соответствующее программное обеспечение для мониторинга.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .