Назад | Перейти на главную страницу

Использование часов для запуска сценария оболочки - но сценарий не работает

Поэтому я хочу следить за своим сетевым подключением, чтобы я мог составить отчет для своего интернет-провайдера. (вроде модем гаснет примерно на 30-60 секунд примерно раз в сутки)

Я скопировал этот удобный небольшой скрипт

http://www.cyberciti.biz/tips/simple-linux-and-unix-system-monitoring-with-ping-command-and-scripts.html

И запустить его с

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