LINUX.ORG.RU
ФорумAdmin

помогите с маленьким скриптиком


0

0

есть сервак линуксовый, и там периодически отваливаеться инет. я знаю набор из 3-4 комманд что бы его поднять.

так вот хотел попробовать написать скриптик что бы он раз, скажем, в минуту, проверял есть ли инет, и если нет- поднимал)

потом, когда он раза 2 в день отваливаться перестанет, полазию в логах, найду причину и исправлю, но скриптик бы написать хотелось сейчас. я не прошу готового решения, хоть 2-3 строчки, а то в программировании под линукс я не силён.

вот действия, которые необходимо что бы делал скрипт

проверить наличие ppp0, если нету, то: pptp-command start;

если нет шлюза, то: route dell default; route add default dev ppp0; посмотреть поставился ли шлюз route -n да, и в /etc/resolv.conf должно быть 127.0.0.1

проверить есть ли инет можно пингом, а запускать через промежутки времени кроном

дальше уже я не знаю, и потому спрашиваю любого совета. Заранее спасибо)

iface=`ifconfig | grep ppp0`
if [ "$iface" = "" ]; then
  pptp-command start # желательно полный путь прописывать
fi
route del default
route add default gw your_gateway
dns=`cat /etc/resolv.conf | grep 127.0.0.1`
if [ "$dns" = "" ]; then
  echo "nameserver 127.0.0.1" > /etc/resolv.conf
fi

за ошибки не пинать. не проверял :)

Komintern ★★★★★
()

Ещё один вариант, с командой ip, так как считаю ifconfig + route устаревшими в Линуксе:

while : ; do ip link show dev ppp0 > /dev/null 2>&1 || pptp-command start sleep 20 # Ну может по больше, допустим 60 ip route show dev ppp0 | grep -q -s 'default' || \ ip route replace default dev ppp0 sleep 1 grep -q -s '^ nameserver 127.0.0.1' /etc/resolv.conf || \ sed -i `/bin/date '+%s'` 's/^ *nameserver.*/nameserver 127.0.0.1/' /etc/resolv.conf sleep 120 done

>проверить есть ли инет можно пингом, а запускать через промежутки времени кроном

А зачем проверять, если мы проверяем интерфейс ppp0, у вас несколько каналов в Инет?

mky ★★★★★
()
Ответ на: комментарий от mky

while : ; do
  ip link show dev ppp0 > /dev/null 2>&1 || pptp-command start
  sleep 20 # Ну может по больше, допустим 60
  ip route show dev ppp0 2>&1 | grep -q -s 'default' || \
  ip route replace default dev ppp0 sleep 1
  grep -q -s '^ nameserver 127.0.0.1' /etc/resolv.conf || \
    sed -i `/bin/date '+%s'` 's/^ *nameserver.*/nameserver 127.0.0.1/' /etc/resolv.conf
  sleep 120
done

mky ★★★★★
()
Ответ на: комментарий от mky

Ну скрипт в выполняемый файл (первая строка #!/bin/bash), права на файл "chmod a+x имя_файла", потом файл запустить с комадной строки от root'а в фоне, он уходит в бесконечный цикл:

# имя_файла > /var/log/pppd-up.log 2>&1 < /dev/null &

mky ★★★★★
()

Если используется ppp, то что мешает воспользоваться его опциями типа: persist, maxfail, lcp-echo-interval, lcp-echo-failure?

gruy ★★★★★
()
Ответ на: комментарий от sdio

Да, честно говоря не знаю, почему не cron. Просто у меня подобный скрипт используется, только там запускается "pppd nodetach ..." и смотрится статус его завершения и время соединения. Если соединение было больше минуты, то повторное соединение устанавливается через 2 секунды, а если меньше (у провайдера "упал" сервер), то попытка повторного соединение предпренимается через 60 секунд.

Плюс, судя по всему у автора топика мало опыта в Линуксе, он ещё так поправит crontab, что перестанет работать cron, а он системе нужен :)

А у какой то версии pppd была ошибка и она игнорировала параметр holdoff, и в режиме persist немедлено пыталась установить повторное соединение. И примерно через 2-4 часа таких попыток (если у провайдера "сломался") демон pppd сам "выпадал" с ошибкой и его приходилось запускать снова. Тогда и был написан скрипт, подобный приведеному выше.

mky ★★★★★
()
Ответ на: комментарий от mky

ну, опыта действительно не много, зато много энтузиазма.. но не в том дело.

спасибо большое всем кто откликнулся, кто помог!) ЛОР- кладезь!)

vavilon-fish
() автор топика
Ответ на: комментарий от mky

mky

а если он у вас не секретный, дайте посмотреть как сделано?..

vavilon-fish
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.