Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: HowTo: Переподключение интернета в случае падения  (Прочитано 3185 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Fant_nk

  • Автор темы
  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
    • Маленькие программы и утилиты
В этом посте расскажу, как можно написать скрипт, который автоматически восстанавливает соединение с интернетом.
Создадим файл в директории, из которой при старте системы будем запускать скрипт:
Цитировать
cd /etc/init.dsudo touch check_internet
Теперь дадим права на запуск:
Цитировать
sudo chmod +x check_internet
Перейдем непосредственно к написанию скрипта. Откроем gedit (можете открыть nano или любой удобный для Вас текстовый редактор):
Цитировать
sudo gedit check_install
Итак, файл мы открыли. Перейдем непосредственно к написанию скрипта:
Цитировать
#!/bin/bash
#Строка выше - путь к интерпретатору. В Ubuntu и во многих дистрибутивах именно так.
#Создаем переменную
DATE=$(date +%F)
#Указываем путь к файлу, в котором будет отображаться, в какое время не было интернета (некая статистика для провайдера ;) )

path=/var/log
name=check_internet
log=$path/$name/$name.log
#Создаем папку назначения.

cd $path
mkdir -p $name

#Если файл лога не был создан, то создаем, а если был, то копируем из него содержимое и вставляем в другой файл. Логи будут вестись по дням.

if [ ! -e "$log" ]
then
    touch $log
else
    cat $log >> $log.$DATE
    rm -f $log
    touch $log
fi

while true
do
#Если пинг проходит, то выводится сообщение (его будет видно, если запустить скрипт из терминала)...
if eval "ping -c 1 www.google.com"; then
    echo "Интернет работает!"
#...а если нет, то делаем паузу 10 сек, затем еще пинг (вдруг пакет случайно потерялся в прошлый раз)
else
    sleep 10
    if eval "ping -c 1 www.google.com"; then
        echo "Интернет работает!"
    else
#Перезапускаем интернет соединение. У меня установлен xl2tpd, поэтому я и перезапускаю нижеуказанный демон. У кого-то может строка отличаться, например, может быть "/etc/init.d/networks restart"
         /etc/init.d/xl2tpd restart
   TIME=$(date +%D-%T)
        #Запишем в лог, когда был разрыв соединения
   echo $TIME: переподключаемся...>>$log
    fi
fi
#делаем паузу в 60 сек - нет необходимости слишком часто запускать скрипт
sleep 60
done
С написанием скрипта мы закончили. Теперь попросим систему запускать скрипт при старте:
Цитировать
sudo gedit /etc/rc.local
Добавляем перед "exit 0" строку:
Цитировать
/etc/init.d/check_internet
Готово! Осталось перезапустить систему или вручную запустить скрипт:
Цитировать
sh /etc/init.d/check_internet
Полностью скопипастено с сайта Маленькие программы и утилиты, автор - я.
ЗЫ: сильно строго не судите - мой первый скрипт.
« Последнее редактирование: 25 Май 2010, 17:08:27 от fantnk »

Гарри Кашпировский

  • Гость
Какой костылище! Автор, браво! Ты изобрел pestist и maxfail в опциях pppd  :)

Оффлайн Fant_nk

  • Автор темы
  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
    • Маленькие программы и утилиты
Какой костылище! Автор, браво! Ты изобрел pestist и maxfail в опциях pppd  :)
М?
Дело в том, что у меня при отсутствии интернета соединение ppp0 остается, причем идет обмен пакетами. В этом случае скрипт поможет. Жду предложений :)
Про pestist и maxfail не знал, надо будет пошаmanить завтра на свежую голову :)

Оффлайн censor

  • Старожил
  • *
  • Сообщений: 1128
    • Просмотр профиля
cd $path
mkdir -p $name

переменная name не задана

else
    cat $log >> $log.$DATE
    rm -f $log
    touch $log
fi

cat и rm можно заменить на mv

while x=0

нафига когда можно обойтись без x=0
while true

а вообще, да, костыль

Оффлайн Fant_nk

  • Автор темы
  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
    • Маленькие программы и утилиты
cd $path
mkdir -p $name

переменная name не задана
Оп, косяк. В готовом скрипте задана.
else
    cat $log >> $log.$DATE
    rm -f $log
    touch $log
fi

cat и rm можно заменить на mv
Нельзя. "cat $log >> $log.$DATE" - добавляем в конец файла, а удаляем для того, чтобы файл не переполнялся. Учел исключительные ситуации (скрипт запушен дважды в день, раз в неделю и т.п.).
while x=0

нафига когда можно обойтись без x=0
while true
Спасиб.
а вообще, да, костыль
Все мое программирование начиналось с костылей... Не люблю банальные примеры или типа "пиши так, вставь сюда, нажми это". Придумал идею, за минуты воплотил - разобрался немного в скриптинге. А как иначе осваивать новый язык?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 25950
    • Просмотр профиля
Термин "костыль" никакого отношения к твоим навыкам программирования не имеет.
Только к твоим знаниям.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

 

Страница сгенерирована за 0.058 секунд. Запросов: 22.