1

Время от времени мой маршрутизатор выключался (иногда из-за обновлений прошивки), и в течение этого времени иногда мой Raspberry Pi также перезагружался, и я получал что-то подобное в журнале:

Jul 25 10:00:49 raspberrypi wpa_supplicant[536]: wlan0: Trying to associate with 80:3f:5d:99:b7:63 (SSID='X' freq=2462 MHz)
Jul 25 10:00:49 raspberrypi wpa_supplicant[536]: wlan0: CTRL-EVENT-ASSOC-REJECT status_code=16
Jul 25 10:00:49 raspberrypi wpa_supplicant[536]: wlan0: CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="X" auth_failures=1 duration=10 reason=CONN_FAILED

Это нормально, так как Wi-Fi на тот момент был недоступен, однако WiFi возвращается через несколько минут. В настоящее время единственное исправление, которое я могу найти, это перезагрузить Pi.

Однако, если меня нет дома, я бы хотел попробовать еще раз. Я оставил это в течение 3 часов, и это никогда не повторялось, таким образом, я задаюсь вопросом, это когда-либо попытается снова? Есть ли способ, которым я могу справиться с этим делом?

1 ответ1

1

Автоматическое переподключение WiFi на RaspberryPi

В этой статье я расскажу о написании короткого скрипта, который автоматически подключает RaspberryPi к сети WiFi. Сценарий проверит, имеет ли Pi сетевое подключение, и, если он не подключен, перезапустит беспроводной интерфейс, чтобы вернуть его в оперативный режим. Мы будем использовать cron для планирования выполнения этого скрипта через регулярные промежутки времени.

Есть несколько способов определить, есть ли у RaspberryPi подключение к сети. Для этого скрипта мы будем использовать ping .

Написание сценария

Для начала нам нужно определить, подключен ли RaspberryPi к сети. Для этого мы попытаемся пропинговать сервер и посмотреть, получим ли мы ответ. Если команда выполнена успешно (RaspberryPi получает ответ от сервера), у нас есть сетевое подключение. Если команда не выполнена, мы выключим и снова wlan0 .

#!/bin/bash

# The IP for the server you wish to ping (8.8.8.8 is a public Google DNS server)
SERVER=8.8.8.8

# Only send two pings, sending output to /dev/null
ping -c2 ${SERVER} > /dev/null

# If the return code from ping ($?) is not 0 (meaning there was an error)
if [ $? != 0 ]
then
    # Restart the wireless interface
    ifdown --force wlan0
    ifup wlan0
fi

Назовите скрипт как-нибудь запоминающимся (wifi_rebooter.sh) и поместите этот скрипт в /usr/local/bin . Убедитесь, что это исполняемый файл, выполнив:

chmod +x /usr/local/bin/wifi_rebooter.sh

Планирование регулярного исполнения

Чтобы скрипт работал автоматически, мы будем использовать cron . Частота запуска этого сценария зависит от личных предпочтений - я выбрал запуск сценария каждые пять минут.

Чтобы запланировать сценарий, откройте /etc/crontab для редактирования и добавьте эту строку внизу:

*/5 *   * * *   root    /usr/local/bin/wifi_rebooter.sh

Это обеспечит запуск сценария от имени пользователя root каждые 5 минут. Если вы не знакомы с синтаксисом cron, взгляните на формат cron .

тестирование

Чтобы проверить, что скрипт работает должным образом , мы собираемся отключить интерфейс wlan0 и подождать, пока скрипт вернет его обратно. Прежде чем отключить wlan0 , вы можете настроить интервал в /etc/crontab на 1 минуту. Также обратите внимание, что это немедленно отключит вас от сеанса оболочки.

Чтобы снять wlan0 для подтверждения работы скрипта, запустите:

ifdown --force wlan0

После терпеливого ожидания в течение ~ 1 минуты попробуйте использовать SSHing обратно в RaspberryPi. Предполагая, что все работает, ваш RaspberryPi должен автоматически подключиться к WiFi. Не забудьте откорректировать интервал в /etc/crontab до более подходящего значения, если вы установите его на одну минуту для тестирования.

источник

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .