BASH. (Пере) подключение к WIFI

Мой небольшой нетбук на Linux работает 24/7. Он выполняет сразу несколько периодических скриптов. Так уж получилось, что его обязанность нельзя перенести на VPS или какой-нибудь хостинг. Поэтому крайне необходимо, чтобы этот нетбук непрерывно функционировал. Но наличие устойчивой ОС не гарантирует стабильность работы.

Каждые 3-4 дня непрерывной работы у нетбука отваливается WIFI модуль. Сеть перестаёт определяться, и передача данных прекращается. В этот момент нетбук перестаёт выполнять свою основную функцию. Чтобы решить проблему был сконструирован скрипт, который перезапускает менеджер сети в случае потери WIFI. Bash скрипт выглядит так:

#!/bin/bash

wlan=`/sbin/ifconfig WIFI_INTERFACE | grep inet addr | wc -l`

if [ $wlan -eq 0 ]; then

service network-manager restart

fi

При использовании необходимо заменить WIFI_INTERFACE на название интерфейса вашего WIFI. Его можно узнать через команду ifconfig. Введите её в консоли и найдите свой WIFI. У меня результат выглядит так:

BASH. Подключение к WIFI

Из него следует, что WIFI_INTERFACE в скрипте надо поменять на «enp3s0». (Только не берите «lo» — это локальный адрес 127.0.0.1).

Скрипт был сделан давно, компиляцией советов из сети. Но если вкратце, то вся соль в этой строке:

wlan=`/sbin/ifconfig WIFI_INTERFACE | grep inet addr | wc -l`

Сначала вызывается команда ifconfig которая выводит данные о выбранном интерфейсе. Затем в этих данных будет проведён поиск командой grep на наличие строки, содержащей фразу «inet addr». Найденная строка будет передана команде wc -l, которая подсчитывает количество символов.

Если ip адрес не задан (WIFI отвалился), то строки с «inet addr» не будет. И длина возвращённой строки будет равно нулю. А это именно тот момент, когда надо перезагрузить network-manager. В коде за этто отвечает условие:

if [ $wlan -eq 0 ]; then

service network-manager restart

fi

Вышеописанный скрипт сейчас работает на нетбуке в бесконечном цикле. Такой цикл можно сделать через cron или watch. Но в любом случае, service network-manager restart требует запуска из-под суперюзера.



2018-03-09T15:29:29
Программирование