Информация
На главную Главная

Мой t-cards.ru
Войти Войти
Зарегистрироваться Регистрация

Разное
Форум Форум
Вернуться Форумы на t-cards.ru> Hard"n"Soft
Логин
Пароль
Регистрация Участники Поиск >> FAQ


Сообщения в теме: "Раздупляем openvpn или как писать скрипты под лину..."
26.09.2007 10:50
Admin

Регистрация: 01.12.2005
Проживание: Москва
Сообщения: 69
По умолчаниюРаздупляем openvpn или как писать скрипты под линукс

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

vpns="192.168.7.1/openvpn_tracker 192.168.1.17/openvpn_mpk"

for d in $vpns
do
host=`echo $d |cut -d/ -f1`
script_name=`echo $d |cut -d/ -f2`
#echo $host
#echo $script_name
r=`ping -c1 $host |grep transmitted | awk '{print(\$4)}'`
str=`route -n|grep $host |sed q1`
lll=`expr length "$str"`
if [ $r -ne 1 ] || [ $lll -lt 1 ]; then
echo "restarting $script_name"
kil=`ps -ef |grep $script_name |grep -v grep | awk '{print(\$2)}'`
#echo $kil
lll=`expr length "$kil"`
[ $lll -gt 1 ] && kill $kil
/etc/init.d/$script_name zap
/etc/init.d/$script_name start
fi
done
26.09.2007 11:06
Admin

Регистрация: 01.12.2005
Проживание: Москва
Сообщения: 69
По умолчаниюРаздупляем openvpn или как писать скрипты под линукс

ну а теперь по пунктам
vpns="192.168.7.1/openvpn_tracker 192.168.1.17/openvpn_mpk"
присваеваем переменной список того что нам надо проверить, причем слешем у нас разделены хост на той стороне и название срипта у нас.

for d in $vpns
do

цикл в переменную d попадают строчки разделенные пробелом

host=`echo $d |cut -d/ -f1`
в переменную хост берем то что в d до черты, обратите внимание на кавычки, это специальные кавычки находящиеся на букве Ё которые заставляют инепритатор выполнить скрипт.

r=`ping -c1 $host |grep transmitted | awk '{print(\$4)}'`
в этой конструкции мы пингуем одним пакетом хост, потом грепаем только строку где должны быть результаты потом берем 4 поле из расчета что разделитель пробел, там по идеи у нас должно быть сколько пакетом принято.

str=`route -n|grep $host |sed q1`
сдесь я навсякий пожарный поставил проверку роутинга, местатми у нас есть впн-ны напрямую и впн общей сети, пинг может уйти по большому кругу если нет прямого роутинга, ладно теперь конкретика
route -n возвращает список маршрутов, отрезаем только те строки где есть наш хост, sed q1 отберет только первую строку из выборки

lll=`expr length "$str"`
измерение длины строки str где у нас строка роутинга

if [ $r -ne 1 ] || [ $lll -lt 1 ]; then
проверка условий, дословно здесь написанно если r(где у нас пакетов принято) не равно 1 или lll(где у нас длина строки роутинга, а еслироутинга нет то она равна 0) меньше 1 тогда

kil=`ps -ef |grep $script_name |grep -v grep | awk '{print(\$2)}'`
ps -ef - возвращает список процессов
grep $script_name - отрезает только те строки что содержат $script_name
grep -v grep - исключит строки где есть grep
awk '{print(\$2)} - возьмет второе поле ввыборке гдеу нас пид выполняемого процесса