Мой небольшой нетбук на 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. У меня результат выглядит так:
Из него следует, что 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 требует запуска из-под суперюзера.