Skip to content

Instantly share code, notes, and snippets.

@carry0987
Last active May 7, 2024 09:55
Show Gist options
  • Save carry0987/372b9fefdd8041d0374f4e08fbf052b1 to your computer and use it in GitHub Desktop.
Save carry0987/372b9fefdd8041d0374f4e08fbf052b1 to your computer and use it in GitHub Desktop.
Raspberry Pi 3B+ Auto reconnect to wifi when lost connect

Auto reconnect to wifi when lost connection

Before you start, make sure ip command is available on your system. In modern Linux distributions, ip replaces older ifconfig command. If net-tools package (that includes ifconfig) is not installed and you prefer using it, you can install it via sudo apt-get install net-tools.

Create script file

Use touch /home/pi/wifi-reconnect.sh to create a shell script file, with the following content:

#!/bin/bash

SSID=$(/sbin/iwgetid --raw)

if [ -z "$SSID" ]; then
    echo "`date -Is` WiFi interface is down, trying to reconnect" >> /home/pi/wifi-log.txt
    if command -v /sbin/ip &> /dev/null; then
        /sbin/ip link set wlan0 down
        sleep 10
        /sbin/ip link set wlan0 up
    elif command -v sudo ifconfig &> /dev/null; then
        sudo ifconfig wlan0 down
        sleep 10
        sudo ifconfig wlan0 up
    else
        echo "`date -Is` Failed to reconnect: neither /sbin/ip nor ifconfig commands are available" >> /home/pi/wifi-log.txt
    fi
fi

echo 'WiFi check finished'

Or you can also use the following command to download the script.

sudo wget https://raw.github.com/carry0987/Raspberry-Pi-Repo/master/Auto-WiFi-Reconnect/wifi-reconnect.sh

Note:

This script uses /sbin/ip command for disabling and enabling the wlan interface. This is a more modern approach compared to using ifconfig and is the preferred way in newer Linux distributions.

Make new file executable

sudo chmod +x /home/pi/wifi-reconnect.sh

Install cron

sudo apt-get install cron

Edit crontab

Use sudo vim /etc/crontab to edit crontab

By putting the following content at the end of the file:

* * * * * root /home/pi/wifi-reconnect.sh

Test it by disconnecting from WiFi:

/sbin/ip link set wlan0 down

The script should reestablish the connection within 1 minute.

Check log file

After the RPi reestablishes the connection, reconnect to the RPi and check the log file:
cat /home/pi/wifi-log.txt

@treaclepumpkin
Copy link

@krummrey I had similar issues. TLDR: I changed the script to reboot the Pi, and that works as you say.

I ended up rewriting the script, in Python, so it is also run as a cron job. The script then pings a user defined DNS server, if it can't reach the server it reboots the Pi and then once the Pi is rebooted when the script next runs it emails me to say it's rebooted because of "loss of internet connection".
As I run Flightaware the script also checks the status of Dump1090 and if that reports a failure the Pi is rebooted as well, this time in the email I get the log with Dump1090's status attached.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment