Script para comprobar el estado y reconectar WIFI en Raspberry

Vamos a ver cómo crear un script para reconectar Wifi en Raspberry Pi, automáticamente, que será muy útil en los casos en que la wifi de la Raspberry Pi se desconecta.

 
Es extraño pero parece que en algunos casos la wifi de la Raspberry Pi se desconecta tras unas horas de funcionamiento. Algunos usuarios han recomendado deshabilitar la administración de energía en Raspberry Pi para que la wifi no se desconecte, pero aún así se sigue desconectando en ocasiones.
 
Así que vamos a ver cómo crear un script que se encargue de comprobar cada cierto tiempo que la Raspberry Pi tiene la wifi activa y conectada a la red, y si no es así, reinicie de nuevo la interfaz wifi.
 
Script para comprobar el estado y reconectar WIFI en Raspberry
 

 
En este artículo:

 

 

Crear el script para reiniciar la interfaz Wifi en Raspberry Pi

 
Lo primero tenemos que crear el script; lo crearemos en  /usr/local/bin/ , que es el directorio de programas que puede ejecutar un usuario normal.

El script podría ser algo así:

pi@raspberry:~ $ cat /usr/local/bin/wifi_rebooter.sh
#!/bin/bash
 
# La IP del server al que queremos hacer ping (8.8.8.8 es un servidor DNS público de Google)
SERVER=8.8.8.8
 
# Enviar solamente 2 pings, y enviar la salida a /dev/null
ping -c2 ${SERVER} > /dev/null
 
# Si el código de respuesta del ping ($?) no es 0 (significará que hay error)
if [ $? != 0 ]
then
# Reiniciar la interfaz wifi
sudo ip link set wlan0 down
sudo ip link set wlan0 up
# sudo ifdown --force wlan0
# sudo ifup wlan0
fi

Podemos enviar la salida a /dev/null

o podemos registrar la salida del script, por ejemplo en /tmp/ping-log.txt
 

 

Permisos del script

 
No nos olvidemos de hacer ejecutable el script, con

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

y que el script tenga los permisos 7 5 5

 


 

 

Crear una tarea programada (crontab) para la ejecución del script

 
Para que el script se ejecute cada cierto tiempo, crearemos una tarea programada en el crontab del usuario pi (pero haciendo que se ejecute con root):

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

En este caso vemos la tarea programada cada 15 minutos:


 

 

Comprobar que el script y la programación en crontab funciona

 
Lanzamos el script manualmente y chequeamos el log (en este caso hemos redirigido la salida al log /tmp/ping-log.txt ):

tail -f /tmp/ping-log.txt

 

 

Comprobamos que se lanzó el script desde crontab, haciendo grep en los logs del sistema.

Primero buscamos coincidencias en todos los logs:

sudo grep 'wifi_rebooter' /var/log/*
grep: /var/log/apt: Is a directory
Binary file /var/log/auth.log matches
grep: /var/log/journal: Is a directory
grep: /var/log/lightdm: Is a directory
grep: /var/log/private: Is a directory
Binary file /var/log/syslog.1 matches

 

Luego, al ver que es un fichero binario, buscamos con grep en fichero binario:

pi@raspberry:~ $ sudo grep -a 'wifi_rebooter' /var/log/syslog.1
Apr 22 19:30:01 raspberry CRON[4923]: (pi) CMD (root /usr/local/bin/wifi_rebooter.sh)
Apr 22 19:45:01 raspberry CRON[32695]: (pi) CMD (root /usr/local/bin/wifi_rebooter.sh)
Apr 22 20:00:01 raspberry CRON[28126]: (pi) CMD (root /usr/local/bin/wifi_rebooter.sh)
Jun 17 11:15:01 raspberry CRON[1061]: (pi) CMD (root /usr/local/bin/wifi_rebooter.sh)

 

Comprobamos que se ha registrado la ejecución de la tarea programada en el log de syslog:

 

 
También podemos desactivar la interfaz wifi, y comprobar después que el script ha funcionado y la interfaz wifi se ha vuelto a levantar.

Desactivamos la interfaz wifi con:

ifdown --force wlan0

 

Hemos visto cómo podemos crear un script para comprobar cada cierto tiempo el estado de la interfaz wifi en Raspberry Pi, y reiniciarla si la interfaz se encuentra desactivada, en estado DOWN. Es muy útil para Raspberry que se encuentran conectadas a través de la interfaz wifi y sufren de problemas de desconexión esporádicos.