Поэтому я хочу следить за своим сетевым подключением, чтобы я мог составить отчет для своего интернет-провайдера. (вроде модем гаснет примерно на 30-60 секунд примерно раз в сутки)
Я скопировал этот удобный небольшой скрипт
И запустить его с
watch -n 15 ./ping-test.sh
Я тестировал это, вытаскивая вилку из моего модема.
Когда часы запускают сценарий в первый раз после отключения сети, он работает нормально (отправляет электронное письмо), а затем перестает работать. После восстановления сети сценарий "завершает работу", а затем часы запускают его снова.
Я получаю почту о том, когда сеть выходит из строя, но не о том, как долго она была отключена.
Если я запустил сценарий прямо из командной строки, он запустится (по электронной почте), а затем завершится.
Есть идеи, почему? Как я могу заставить скрипт продолжать работу после отключения сети?
Ваше решение с командой «смотреть» не подходит. Я бы попытался решить это примерно так:
#!/bin/bash
HOSTS="foo.bar foo2.bar"
COUNT=4
while :
do
for myHost in $HOSTS
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
# 100% failed
echo "Host : $myHost is down (ping failed) at $(date)"
fi
done
sleep 15 # here is your refresh rate
done
а затем запустите его как обычный скрипт: ./script_name.sh
завершить с помощью CTRL + C.
Вы можете сделать это в реальном времени, используя "ip monitor". Это выведет любые события, такие как удаление IP-адреса или добавление, изменение состояния канала с рабочего на отключенное или изменение маршрута каким-либо образом.
ip monitor all >> /some/log.log &
Вы должны открываться в режиме добавления. Если вы хотите оставить его для работы вне терминала, вы можете просто отказаться от задания с помощью "disown% 1"
Если вам нужны и временные метки, есть несколько способов. Простой способ - использовать inotifywait, чтобы проверить, получил ли файл обновление, а затем добавить к нему свою дату. Было бы легко сделать вышеупомянутое и это в сценарии оболочки и, возможно, отказаться от этого, чтобы вместо этого вы получили
ip monitor all >> /some/log.log &
while inotifywait -qq -e modify /some/log.log; do
sleep 0.2;
date >>/root/mon.log;
done
наслаждаться
пинг зависнет, если не сможет достичь своей цели, и, возможно, поэтому скрипт перестает работать, потому что пинг все еще ждет ответа. Попробуйте добавить -w крайний срок или -W тайм-аут вариант для пинг.
Он перестает функционировать, потому что он уже завершен, но зависит от родительского процесса - watch
команда, которая все еще жива.
Я получаю почту о том, когда сеть выходит из строя, но не о том, как долго она была отключена.
Этот сценарий уже печатает дату, когда удаленная система не работает:
echo "Host : $myHost is down (ping failed) at $(date)" | mail -s "$SUBJECT" $EMAILID
Как я могу заставить скрипт продолжать работу после отключения сети?
это ping
общаясь с -c 1
поэтому он остановится после отправки 1 пакета ECHO_REQUEST.
Поместите его в cron для запуска каждые минуты:
*/1 * * * * /path/to/your/script