LINUX.ORG.RU

Готовый скрипт проверки соединения с хостом (проверка инета или хоста)

 


0

3

Наткнулся на доработку, но конечного результата там не было. Выкладываю проверенный готовый скрипт:

#!/bin/bash
#
# Скрипт в бесконечном цикле пингует удалённый хост в инете с интервалом 5 сек
# при первой удачной или неудачной попытке пинга пишется соответствующее сообщение в лог и на экран
# следующая запись в лог делается только при изменении состояния связи

# Узел опроса
ip="ya.ru"
# Кол-во пингов
count=3
# инициализация переменной результата, по умолчанию считается, что связь уже есть
status=connected
# Файл логов
logfile=/ping.log

echo `date +%Y.%m.%d__%H:%M:%S`' Скрипт проверки связи запущен' >> ${logfile}
# бесконечный цикл
while [ true ]; do
    # пинг с последующей проверкой на ошибки
    result=$(ping -c ${count} ${ip} 2<&1| grep -icE 'unknown|expired|unreachable|time out')

    # если ни один не прошел, то
    if [ "$status" = connected -a "$result" != 0 ]; then
	# Меняем статус, чтоб сообщение не повторялось до смены переменной result
	status=disconnected
	# Записываем в лог результат
	echo `date +%Y.%m.%d__%H:%M:%S`' Соединение с интернет отсутствует' >> ${logfile}
	# Вывод результата на экран
	echo `date +%Y.%m.%d__%H:%M:%S`' Соединение с интернет отсутствует'
    fi
    # если все пинги прошли, то
    if [ "$status" = disconnected -a "$result" -eq 0 ]; then
	# Меняем статус, чтоб сообщение не повторялось до смены переменной result
	status=connected
	# Пишем в лог время установки соединения
	echo `date +%Y.%m.%d__%H:%M:%S`' Связь есть' >> ${logfile}
	# Вывод результата на экран
	echo `date +%Y.%m.%d__%H:%M:%S`' Связь есть'
    fi
    # 5 сек задержка
    sleep 5
done

 logfile=/ping.log

может лучше в /tmp ? а то пускать от рута пингалку както некошерно

 result=$(ping -c ${count} ${ip} 2<&1| grep -icE 'unknown|expired|unreachable|time out')

достаточно код возврата от пинга проверять

и вообще много бесполезного кода

Skolotovich ★★★ ()

Чисто по-мелочи:
Вместо

	# Пишем в лог время установки соединения
	echo `date +%Y.%m.%d__%H:%M:%S`' Связь есть' >> ${logfile}
	# Вывод результата на экран
	echo `date +%Y.%m.%d__%H:%M:%S`' Связь есть'
надо
 date "+%Y.%m.%d__%H:%M:%S Связь есть" | tee -a "${logfile}"
и лучше
  Msg () {
    date "+%Y.%m.%d__%H:%M:%S ${1}" | tee -a "${logfile}"
  } # Msg

ABW ★★★★ ()
Ответ на: комментарий от Dimarius

Он рассчитан на использование в скриптах и даёт соответствующий вывод. Если есть возможность то имеет смысл поставить.

sin_a ★★★★★ ()
Ответ на: комментарий от Dimarius

Путь лога можно под себя исправить по желанию в одном месте. Например на маке рута для /ping.log не нужно.

нужен

sh-3.2$ uname -a
Darwin worker.local 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64
sh-3.2$ touch /ping.log 
touch: /ping.log: Permission denied

не надо засорять рут

Skolotovich ★★★ ()
Ответ на: комментарий от Skolotovich

А вот на 10.6.8 вывод:

sh-3.2$ uname -a
Darwin *host* 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:32:41 PDT 2011; root:xnu-1504.15.3~1/RELEASE_X86_64 x86_64
sh-3.2$ touch /ping.log
sh-3.2$
Засорять не надо, согласен :)

Dimarius ()

а если доработать?

Вот было бы интересно увидеть такой скрипт, но не на один хост а на, к примеру 5? Т.е. он подряд пингует 5 хостов если не может пингануть один то выводит информацию, что третий недоступен и т.д.

anonymous ()
Ответ на: а если доработать? от anonymous

Для этого есть готовые комерческие решения с уведомлением по мылу/sms/etc. когда кто умер и когда поднялся.

beastie ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.