Спасибо, за опцию "sleep 10". Она мне в этом бесконечном цикле помогла выдержать какую-то паузу.
Спасибо, Виталию за помощь в написании скрипта.
Итак, по вышеизложенным просьбам пишу как он выглядит окончательно:
#!/bin/sh
while true
do
ping -c 4 10.10.10.10>/dev/null
if [ $? -eq 0 ]
then
echo "The vpn connection to office 'ХХХХХХХ' is active."
netstat -r | grep 88.88.88/24>/dev/null
if [ $? -eq 0 ]
then
echo "The route to office 'ХХХХХХХ' is active."
else
echo "The route to office 'ХХХХХХХ' is not active!"
ifconfig ng0 | grep UP>/dev/null
if [ $? -eq 0 ]
then
route add -net 88.88.88.0/24 10.10.10.10
else
echo "The interface 'ng0' is down!"
fi
fi
else
echo "The vpn connection to office 'ХХХХХХХ' is not active!"
fi
sleep 30
done
А теперь с комментариями:
#!/bin/sh
while true
do
- запускаем бесконечный цикл;
ping -c 4 10.10.10.10>/dev/null
- пингуем нужный нам адресс;
if [ $? -eq 0 ]
then
- если пинг проходит успешно, то переходим к анализу присутствия маршрута;
echo "The vpn connection to office 'ХХХХХХХ' is active."
- эту строчку можно выводить или на терминал, или в лог-файл, по желанию;
netstat -r | grep 88.88.88.0/24>/dev/null
- проверяем присутствие маршрута в таблице маршрутизации;
if [ $? -eq 0 ]
then
echo "The route to office 'ХХХХХХХ' is active."
- если маршрут присутствует, то выводим сообщение;
else
echo "The route to office 'ХХХХХХХ' is not active!"
ifconfig ng0 | grep UP>/dev/null
- если маршрут не присутствует, то делаем проверку: поднят ВПН-интерфейс или нет. Без этой проверки, очень часто бывало так, что нижеуказанный маршрут добавлялся, но не на ВПН-интерфейс, а на интерфейс локальной сети и соответственно ВПН-соединение между двумя офисами не работало, корректно;
if [ $? -eq 0 ]
then
route add -net 88.88.88.0/24 10.10.10.10
- если ВПН-интерфейс поднят, то добавляем маршрут;
else
echo "The interface 'ng0' is down!"
fi
- иначе выводим, что интерфейс закрыт, и соттветственно конец проверки условия на предмет активности ВПН-интерфейса;
fi
- конец проверки условия присутствия маршрута в таблице маршрутизации;
else
echo "The vpn connection to office 'ХХХХХХХ' is not active!"
- если пинга нет, то выводим вышеуказанный текст;
fi
- конец проверки условия, на наличие положительного пинга;
sleep 30
- выдерживаем паузу 30 секунд, для запуска цикла по новой;
done
- конец.
Вот, в принципе и всё!
От себя хочу добавить, что запустив этот скрипт в фоновом режиме из rc-шников - всё работает пока отлично. Рвётся ВПН-соединение из-за "погодных условий", или нет, скрипт своё дело делает и как только соединение появляется, две локальных сети видят друг-друга по ВПНу на ура..
Всем спасибо, за помощь и внимание!