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
.
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
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.
sudo chmod +x /home/pi/wifi-reconnect.sh
sudo apt-get install cron
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.
After the RPi reestablishes the connection, reconnect to the RPi and check the log file:
cat /home/pi/wifi-log.txt
@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.