Hardware > Ordenadores

Scripts en Linux - Reinicio red, información arranque y comunicación Telegram

(1/4) > >>

jantoni:
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

--- Código: ---#!/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


--- Fin del código ---


rc.local

--- Código: ---#!/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

--- Fin del código ---


telegram

--- Código: ---#!/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


--- Fin del código ---

jantoni:
Por supuesto, como aquí hay mucho experto escondido en el follaje.....si tenéis sugerencias de mejora, ponedlas por favor.

Un foro es, para compartir.

jantoni:
Ah, se me olvidaba poner una pantalla de telegram en el que notifica que la Raspi se ha iniciado

ea1htb:
muchas gracias @jantoni, eso me podria servir para un problema que tengo en mi raspy ???? me he dado cuenta que llevo unos dias que si se me va la luz, a la hora de volver a enviar datos, tengo que modificar el fichero resolv.conf, ya que me cambia la dns 8.8.8.8 a 127.0.1.0..... y no envia datos de la estacion a meteoclimatic

jmviper:
Creo que tendrás que editar los servidores DNS en la configuración de red de la raspi o al arrancar networkmanager sobrescribirá resolv.conf

Si tienes la versión de escritorio puedes probar a ponerlos en el icono de red o en el terminal con raspi-config -> Configure Network Settings

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa