- if ping 10.10.0.1 then beep fi
- man ping
- Очевидно
- Вывод результата ping’a
- Скрипт BASH проверяющий доступность сайта/ip-адреса.
- Скрипт доступности ресурса
- Скрипт доступности ресурса каждые 10 секунд
- Как проверить доступ в интернет с помощью скрипта bash в linux?
- 8 ответов
- надежная ping в отдельном скрипте bash:
- Про Debian
if ping 10.10.0.1 then beep fi
Возникла необходимость написать просто скрипт, должен делать он следующее. Если машина лежит, никаких действий, если же начинает пинговаться пищит спикер. Я только начал изучать shell scripting и все как бы хорошо, но получается это реализовать только если команде ping задать count, если без -c ключа, то получается нужно прерывать программу, что бы услышать сигнал. код прилагаю
man ping
ping -w — задание максимального времени ожидания
Очевидно
if ping -c 3 10.10.0.1
then echo host online
else beep
fi
А ещё можно воспользоваться зарезервированным символом «!», который возвращает 0 в случае ненулевого кода возврата и 1 в случае нулевого:
if ! ping -c 3 10.10.0.1
then beep
fi
А ещё можно воспользоваться конструкцией «||»:
ping -c 3 10.0.0.1 || beep
Спасибо, как раз то, что надо
Полезный ключик -a, особенно когда подымаешь сеть на машине с клавиатурой но без монитора 🙂
Источник
Вывод результата ping’a
Привет. Хочу получить в удобоваримой форме результат работы утилиты ping. Допустим, ответ получен — 1, не получен — 0. Как это можно сделать на bash? Спасибо.
Только это наоборот, 0, если ответ получен и 1, если нет.
Попробуй сделать «ping -c3 x.x.x.x ; echo $?» Если ping не получает ответных пакетов, то он завершит работу с кодом возврата 1.
#!/bin/bash
#
if /bin/ping -c 2 192.168.0.1 > /dev/null 2> /dev/null
then
echo 1;
else
echo 0;
fi
Спасибо, помогло, а где прочесть про $?
То, что нужно, спасибо.
$? — это exit code. Его возвращают все программы, и обычно он равен 0 в случае удачного завершения работы и какому-дибо другому числу в противоположном случае.
Конструкции «||» и «&&», а также директива «if» в bash в примере ниже проверяют именно его.
Спасибо, взял на заметку.
А тут можно в одном посте отвечать всем сразу?
ИМХО, если нужно ответить нескольким людям сразу, нужно отвечать на своё сообщение, используя . для привлечения внимания адресатов.
-q Quiet output. Nothing is displayed except the summary lines at startup time and when finished.
Его возвращают все программы, и обычно он равен 0 в случае удачного завершения работы и какому-дибо другому числу в противоположном случае.
не «обычно», а «всегда».
возвращаются коды с ошибками 1..63
коды 64..127 зарезервированы для пользовательских скриптов
коды 128..255 возвращаются в случае прерывания.
Источник
Скрипт BASH проверяющий доступность сайта/ip-адреса.
Сегодня в статье разберем пример написания скрипта для проверки доступности ресурса при помощи BASH в Linux. Может кому то будет полезен :).
Скрипт доступности ресурса
- Создадим текстовый файл ping_test.sh со следующим содержанием:
Скрипт будет проверять доступность ресурса при помощи команды ping до тех пор пока данный ресурс не выйдет на связь. Для автоматизации давайте запишем задание в crontab. Задание будет срабатывать при перезагрузке системы.
Также если вам необходимо чтобы еще отправлялось уведомление на почту, то скрипт примет такой вид:
- IP=»10.5.5.1″ — IP-адрес для мониторинга. Через пробел можно указать несколько адресов.
- ping -c 2 -W 1 — количество пакетов посылаемых на сервер
- -f «кому@yandex.ru» — указываю свою почту
- -t «от_кого@yandex.ru» — указываем почту от которой будем отправлять.
- -u «Проблема с доступностью сервера» — тема сообщения
- -m «Сообщение от $(hostname) . $ADDR недоступен с $(date)» — Содержание сообщения
- -xu «логин» — Логин от вашей почты
- -xp «пароль» — Пароль от вашей почты
- -s «smtp.yandex.ru» — Адрес smtp сервера отправки почты, в моем случае это yandex
- -o «message-charset=utf-8» — Кодировка сообщения, без нее будет крякозябры.
- Даем права на исполнение
Для того чтобы сработала отправка почты нужно установить пакет sendemail
- Радуемся, через заданный промежуток времени в событии будет высвечено сообщение о статусе.
Скрипт доступности ресурса каждые 10 секунд
Запускать задание через каждых 10 секунд:
Если есть вопросы, то пишем в комментариях.
Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо.
Источник
Как проверить доступ в интернет с помощью скрипта bash в linux?
в моей школе Интернет недоступен(каждую ночь после 23: 0 школа убьет интернет, чтобы положить нас в постель >..ping -w1 .
то есть, когда я использую: ping -q -w1 -c1 8.8.8.8 чтобы проверить, если интернет вверх / вниз, он будет там без вывода и не выходит, так же, как я использую один cat .
вы можете понять мой вопрос. Я не знаю, почему это так, но я думаю, что проблема связана с школа-интернет-сервис. Есть предложения? (Я думаю wget может быть хорошей альтернативой, но как использовать?)
8 ответов
Если школа фактически отключает свой маршрутизатор вместо перенаправления всего трафика на страницу «почему ты не в постели», тогда нет необходимости загружать всю веб-страницу или отправлять HTTP-заголовки. Все, что вам нужно сделать, это просто установить связь и проверить, слушает ли кто-то.
это выведет » соединение с портом 8.8.8.8 53 [tcp/domain] успешно!»и возвращают значение 0, если кто-то слушает.
Если вы хотите использовать его в оболочку сценарий:
используйте опцию timeout -t :
установить fping: > меньше проблем, чем ping.
использовать например так:
выход произведет smth как:
число в конце строки показывает длительность предыдущего состояния, т. е. 19 вверх, 7 сек вниз
используя приведенный выше пример, я написал этот скрипт для регистрации состояния вашего соединения: https://gist.github.com/cganterh/ffc2fffa8263857cbece
сохраните следующий код в тег .
без wget
надежная ping в отдельном скрипте bash:
поместите это в отдельный скрипт. Он справится разных ситуациях в сети как (1) не подключен к сети, (2) подключен к сети, но не может получить доступ к интернету (или, по крайней мере, Google), и (3) подключен к интернету.
вы можете позже использовать exit code скрипта для проверки подключения, например
Источник
Про Debian
Набросал на днях простенький скрипт, которые перезапускает сеть при потере пинга.
Тем, кому нужно — поймут как подправить. Пишу в файл специально из некоторых соображений, которые были продиктованы изначальной задачей.
#!/bin/bash
ping -c 3 www.ru > /root/ping
a=$(cat /root/ping | tail -n2 | head -n1 | awk <'print $6'>| sed s/%//)
echo $a
if [ $a != 0 ]
then date > /root/fail && ifdown eth0 && sleep 2 && ifup eth0
fi
echo T
При потере пакетов, отличной от нуля — сервер делает пометку в /root/fail, делает ifdown eth0, ждёт 2 секунды и делает ifup eth0.
При необходимости — поменяйте строку then date > /root/fail && ifdown eth0 && sleep 2 && ifup eth0. Например на pon/poff
Запускать в screen, само собой (или в локальной консоли, если туда есть доступ). Будьте внимательны при остановке скрипта.
запускать так:
while [ 1 ]; do ./root/ping.sh; echo pause; sleep 2; echo script; done
echo pause; sleep 2; echo script; — для того, чтобы не стопнуть скрипт во время его выполнения.
UPD:
Более прогрессивная версия +)
#!/bin/bash
doping () <
ping -c 3 8.8.8.8 > /dev/null
>
dook () <
#what to do if ping ok?
echo «ping ok»
>
doerror () <
# what to do if ping failed?
echo «error»
echo «$(date) ping failed! i am restarting network» >> /var/log/network-fail.log
>
doping && dook || doerror
# this is the end of script.
Источник