В зависимости от бюджета у Вас есть широкий спектр от Netbackup Symantec до различных продуктов CommVault, Arcserve и свободного материала как инструменты NT Backup и Linux также. Необходимо разработать точно, что Вы хотите скопировать, от того, где и каков Ваш бюджет.
ping будет зависать, если он не может достичь своей цели, и, возможно, поэтому скрипт перестает работать, потому что ping все еще ожидает ответа. Попробуйте добавить параметр -w крайний срок или -W тайм-аут в пинг .
Вы можете сделать это в реальном времени, используя "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
Enjoy
Он перестает функционировать, потому что он уже завершен, но зависит от родительского процесса - watch
команда, которая все еще активна.
Итак, я получаю почту, когда сеть выходит из строя, но не как долго он был недоступен для.
Этот сценарий уже печатает дату, когда удаленная система не работает:
echo "Хост: $ myHost не работает (ошибка ping) в $ (date)" | mail -s "$ SUBJECT" $ EMAILID
Как я могу заставить скрипт продолжать работу, когда сеть не работает?
Это пинг
с -c 1
поэтому он остановится после отправки 1 пакета ECHO_REQUEST.
Поместите его в cron для запуска каждые минуты:
*/1 * * * * /path/to/your/script
Ваше решение с командой «смотреть» не подходит. Я бы попытался решить это примерно так:
#!/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.