Как реализовать досрочное завершение команды в bash?
Сейчас в путешествии и хочу написать небольшую программу, которая бы выводила в качестве уведомления на рабочий стол
"Соединение потеряно" или "Соединение восстановлено"
Реализовывать планируется так:
1. С помощью wget запросить страницу google.com
2. Подождать несколько секунд
3. Если в каталоге появился файл index.html, связь есть. Если не появился - связи нет
Вопрос следующий:
Как можно досрочно завершить wget? То есть, чтобы он пытался связаться в течение скажем 5 секунд, и если ничего не получилось, то команда бы завершалась
--dns-timeout=SECS set the DNS lookup timeout to SECS
--connect-timeout=SECS set the connect timeout to SECS
--read-timeout=SECS set the read timeout to SECS
Решение на коленке в лоб. Скрипт пришлёт одно уведомление когда сеть упадёт и одно когда поднимется. Проверка раз в 60 секунд.
#!/usr/bin/env bash
addr=google.com
lock=/tmp/connect.failed
while true; do
if ping -c 1 -W 5 "$addr" &> /dev/null; then
if [ -f "$lock" ]; then
notify-send 'Проверка подключения' 'Есть коннект'
rm "$lock"
fi
else
if [ ! -f "$lock" ]; then
notify-send 'Проверка подключения' 'Связи нет'
touch "$lock"
fi
fi
sleep 60
done
Непонятно зачем тут google? Если тебе нужен доступ к деловым ресурсам по работе - то и пингуй их.
Даже более того. Не пингуй а просто сигнализируй когда твои jobs упали. А то куча ненужных событий
идет. Мы и так живем в мире переизбытка информации...
Никита Каргин, есть интернет или нет. Это вопрос интересный. Прямо схоластический. Типа - а сколько ангелов могут поместится на кончике булавки. Сколько сайтов надо пингануть чтобы решить что интернет таки есть.
Как по мне достаточно одного
По моей логике, если страницу сайта можно получить достаточно быстро, то интернет есть
Поэтому и нужно досрочное завершение