В этой статье я расскажу о написании короткого скрипта, который автоматически подключает 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
до более подходящего значения, если вы установите его на одну минуту для тестирования.
источник