Pues aprovechando el hilo sobre la conectividad, he recuperado del cajón unos script que preparé hace años para unos inventos en ubicación remota.
Se trata de 3 ficheros.
checknet: Comprueba la conectividad del ordenador mediante ping a un ordenador predefinido. Si no responde, se entiende que la red no funciona correctamente. Se reinicia la red. Y en el caso de que tras varios reinicios de la red, no se recupere la comunicación, se hace un reinicio del ordenador. En el caso de que se recupere la conectividad, envía un mensaje por Telegram informando de la situación.
rc.local: Su función es sustituir al fichero /etc/rc.local. Informa por Telegram que el ordenador acaba de arrancar. Por lo general tras un reinicio.
telegram: Es el script para mandar via Telegram los mensajes generados por los scripts anteriores.
checknet y telegram los tengo ubicados en el directorio personal: En el caso de las raspis, lo tengo en /home/pi
rc.local copio la parte de Telegram en el original de /etc/rc.local
Hay que darles permisos de ejecución.
Y checknet es invocado por crontab cada 5 minutos. De ese modo, cada 5 minutos se comprueba que la raspi, en este caso, está viva. En realidad si se ha colgado el script no funcionará. Pero nunca, nunca he visto una raspberry pi colgada.
Espero que os sean útiles
checknet
#!/bin/bash
# Este script comprueba la conexión a internet mediante pings a google.com
# Si la conexión a internet está OK, el script finaliza
# Si no está OK, se reinicia el servicio de internet
# Si después de reiniciar el servicio de internet sigue igual, se reinicia la Orange Pi
# Debe incluirse en /etc/crontab con la periodicidad que se elija
# Uso del script
# No hay que pasar ningún parámetro al script
# Declara la direccion IP o dominio del dispositivo a comprobar
objetivo="8.8.8.8"
# Define el numero de pings que se van a enviar al dispositivo
let pings=5
# Define el tiempo en segundos entre reinicios del servicio de red
let espera=20
# Define el número de intentos de reinicio de networking
let intentos=2
# Define el dispositivo a reiniciar. Por lo general eth0 para ethernet y wlan0 para wifi
dispositivo='wlan0'
# Define el directorio donde se encuentran otros scrits
directorio='/home/pi'
######################################################
######################################################
######################################################
let bucle=0
while [ $bucle -lt $intentos ]; do
resultado="true"
# Realiza un ping sobre objetivo. Si el resultado es incorrecto cambia a false variable objetivo
(! ping -c$pings $objetivo 2>&1) && resultado="false"
# Si el resultado del ping es correcto, finaliza el script
if [ $resultado == "true" ]
then
echo "Dispositivo online. Fin del Script"
break
fi
# Si el ping no es correcto, continua el script
# A continuacion se reinicia el servicio de internet
# Despues de encender, se espera el tiempo indicado en la variable "espera" (en segundos) para reintentar y se eleva el contador bucle
#/etc/init.d/networking restart
echo "Tirando el dispositivo abajo"
ifconfig $dispositivo down
sleep 10
echo "Levantando el interface"
ifconfig $dispositivo up
sleep $espera
let bucle=$bucle+1
done
# A continuacion se vuelve a hacer un ping.
# Si el resultado es correcto se envia un mensaje a un grupo de Telegram mediante /home/admin/telegram
# Si el resultado no es correcto se reinicia la Orange Pi
if [ $bucle -gt 0 ]
then
resultado="true"
(! ping -c$pings $objetivo 2>&1) && resultado="false"
if [ $resultado == "false" ]
then
echo "Reiniciando"
shutdown -r now
else
mensaje="La $(hostname) - $(hostname -I) se había desconectado de la red. Ha quedado en servicio después de $bucle reinicios del servicio networking."
export mensaje
$directorio/telegram
fi
fi
rc.local
#!/bin/bash
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
mensaje="La $(hostname), se acaba de iniciar: $(date)
La dirección IP asignada es la $(hostname -I)
Los datos Wifi son:
$(iwconfig)
Saludos de su seguro servidor"
export mensaje
/home/pi/telegram
exit 0
telegram
#!/bin/bash
# Bibliografia
# https://blog.angelinux-slack.net/2017/01/10/usar-un-bot-de-telegram-para-enviar-mensajes-en-nuestros-sistemas-con-php-bash-y-python/
# Ligeros retoques hechos por mi, en realidad por pura intuicion
# Bash Pocket Reference. Arnold Robbins. Editorial O'Really 2nd Edition
USERID="IDdelgrupoTelegram"
KEY="KEYdelbot"
URL="https://api.telegram.org/bot$KEY/sendMessage"
MSG=$mensaje
curl -s --max-time 10 -d "chat_id=$USERID&disable_web_page_preview=1&text=$MSG" $URL