ping
это способ проверить , является ли жив и подключен хост. (Если хост жив, но отключен или медленно реагирует, вы не можете отличить его от мертвого.)
Параметры, поддерживаемые ping
командой, различаются в зависимости от системы. Вы хотите убедиться, что он не зацикливается вечно, а возвращается через несколько секунд, если не получил ответ.
С FreeBSD и Linux iputils ping -c 1 -W 1 >/dev/null
отправляет один пинг и ждет 1 секунду. Вам не нужно анализировать выходные данные: команда возвращает 0, если она получила ответ, и ненулевое значение в противном случае (неизвестное имя хоста, нет маршрута к хосту, нет ответа). В некоторых реализациях могут потребоваться разные флаги (например, -w
вместо -W
FreeBSD), проверьте руководство в вашей системе.
if ping -c 1 -W 1 "$hostname_or_ip_address"; then
echo "$hostname_or_ip_address is alive"
else
echo "$hostname_or_ip_address is pining for the fjords"
fi
answered
ответ. ОП специально спросилmore ways to see if a given host is up
, кроме как, сping
которым этот ответ не дает."Because of the load it can impose on the network, it is unwise to use ping during normal operations or from automated scripts."
Ping - отличный способ получить быстрый ответ о том, подключен ли хост к сети, но он часто не сообщает вам, жив хост или нет, или он все еще работает, как ожидалось. Это связано с тем, что ответы на пинг обычно обрабатываются ядром, поэтому даже если каждое приложение в системе аварийно завершилось (например, из-за сбоя диска или нехватки памяти), вы все равно часто будете получать ответы на пинг и можете предполагать, что компьютер работает нормально, когда ситуация совершенно противоположная.
Проверка услуг
Обычно вас не волнует, находится ли хост в сети или нет, но вас действительно волнует, выполняет ли машина какую-то задачу. Так что, если вы можете проверить задачу напрямую, то вы будете знать, что хост включен, и что задача все еще выполняется.
Например, для удаленного хоста, на котором работает веб-сервер, вы можете сделать что-то вроде этого:
Если он работает по SSH и у вас настроены ключи для входа без пароля, у вас есть еще несколько вариантов, например:
Это работает путем SSH'ing на хост и запуска
true
команды, а затем закрытия соединения.ssh
Команда будет возвращать только успех , если эта команда может быть запущена успешно.Удаленные тесты через SSH
Вы можете расширить это, чтобы проверить конкретные процессы, например, убедиться, что они
mysqld
запущены на компьютере:Конечно, в этом случае вам лучше запустить что-то вроде
monit
цели, чтобы убедиться, что служба продолжает работать, но это полезно в сценариях, где вы хотите выполнить какую-то задачу только на машине A, если машина B готова к ней. ,Это может быть что-то вроде проверки того, что на целевой машине смонтирована определенная файловая система, прежде чем выполнять
rsync
ее, чтобы случайно не заполнить основной диск, если вторичная файловая система не смонтирована по какой-либо причине. Например,/mnt/raid
перед тем, как продолжить, убедитесь, что он установлен на целевой машине.Услуги без клиента
Иногда нет простого способа подключиться к сервису, и вы просто хотите посмотреть, принимает ли он входящие TCP-соединения, но когда вы попадаете
telnet
к цели на рассматриваемом порту, он просто сидит там и не отключает вас, что означает выполнение этого. в сценарии может привести к зависанию.Хотя это и не так чисто, вы можете сделать это с помощью программ
timeout
иnetcat
. Например, он проверяет, принимает ли компьютер соединения SMB / CIFS через TCP-порт 445, и вы можете увидеть, работает ли на нем общий доступ к файлам Windows, даже если у вас нет пароля для входа или клиентские инструменты CIFS не ' т установлено:источник