16 diciembre 2016

Notificación por email al reinicio de la Raspberry Pi

En la anterior entrada ya hemos configurado nuestra Raspberry Pi para que ante cualquier cuelgue se reinicie automáticamente. Eso está muy bien, pero quizás nos interesa saber cuando se ha quedado colgada, por si se repite habitualmente investigar a que es debido. Para eso vamos a configurar que después de cada reinicio nos envíe un email avisándonos de ello.

Abrimos el terminal e instalamos los paquetes necesarios:
sudo apt-get install sendmail-bin
sudo apt-get install mutt
Creamos el archivo .muttrc:
sudo nano /root/.muttrc
Con el siguiente contenido, donde editaremos las seis primeras lineas con los datos de nuestra cuenta de Gmail:
# basic .muttrc for use with Gmail
# Change the following six lines to match your Gmail account details
set imap_user = "username@gmail.com"
set imap_pass = ""
set smtp_url = "smtp://username@smtp.gmail.com:587/"
set smtp_pass = ""
set from = "username@gmail.com"
set realname = "Firstname Lastname"
#
# # Change the following line to a different editor you prefer.
set editor = 'vim + -c "set textwidth=72" -c "set wrap"'
# Basic config
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set imap_check_subscribed=yes
set hostname = gmail.com
set mail_check = 120
set timeout = 300
set imap_keepalive = 300
set postponed = "+[GMail]/Drafts"
set header_cache=~/.mutt/cache/headers
set message_cachedir=~/.mutt/cache/bodies
set certificate_file=~/.mutt/certificates
set move = no
set include
set sort = 'threads'
set sort_aux = 'reverse-last-date-received'
set auto_tag = yes
set pager_index_lines = 10
ignore "Authentication-Results:"
ignore "DomainKey-Signature:"
ignore "DKIM-Signature:"
hdr_order Date From To Cc
alternative_order text/plain text/html *
auto_view text/html
bind editor complete-query
bind editor ^T complete
bind editor noop
# # Gmail-style keyboard shortcuts
macro index,pager am "unset trash\n " "Gmail archive message" # different from Gmail, but wanted to keep "y" to show folders.
macro index,pager d "set trash=\"imaps://imap.googlemail.com/[GMail]/Bin\"\n " "Gmail delete message"
macro index,pager gi "=INBOX" "Go to inbox"
macro index,pager ga "=[Gmail]/All Mail" "Go to all mail"
macro index,pager gs "=[Gmail]/Starred" "Go to starred messages"
macro index,pager gd "=[Gmail]/Drafts" "Go to drafts"
macro index,pager gl "?" "Go to 'Label'" # will take you to a list of all your Labels (similar to viewing folders).
 Creamos el script con el contenido del email que nos enviará cuando se reinicie:
sudo nano mailIP
Y pegamos lo siguiente, donde YOURMAIL, es la dirección donde queremos recibir el correo de aviso:
 #!/bin/sh
 mailreciever=YOURMAIL
 today=$(date)
 my_ip=`wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`
 my_pi="La Raspberry Pi se ha reinicado!! "
 message="La Raspberry Pi se ha reiniciado el $today. Dirección IP = $my_ip"
 echo $message > message.txt
 mutt -s "${my_pi}" ${mailreciever} < message.txt
Nos aseguramos de darle permisos de ejecución:
sudo chmod +x mailIP
Y lo probamos con este comando:
./mailIP
Si todo está correctamente configurado habremos recibido un correo en la cuenta que hemos especificado anteriormente. Ahora vamos a hacer que ese correo se mande después de cada reinicio, para ello editamos:
sudo nano /etc/rc.local
Y añadimos lo siguiente después de esta linea "printf "My IP address is %s\n" "$_IP"":
  sleep 30
  sudo /home/pi/mailIP &
Lo guardamos y le damos permisos de ejecución:
sudo chmod 0755 /etc/rc.local
Solo nos queda reiniciar y comprobar que recibimos el correo:
sudo reboot

12 diciembre 2016

Reinicio automático de la Raspberry Pi con Watchdog

Si tenemos un sistema domótico instalado en la Raspberry Pi en un sitio al cual no podemos acceder o simplemente no podemos conectarle físicamente una pantalla, teclado y ratón y solo tenemos acceso a él mediante SSH. ¿Que hacemos cuando la Raspberry Pi se queda colgada?. Para solventar este problema vamos a usar el servicio watchdog.
El watchdog timer es un temporizador electrónico que se usa para detectar algún mal funcionamiento o cuelgue del sistema en el que está instalado y reiniciarlo para volver al funcionamiento normal.
Afortunadamente el chip de nuestra Raspberry Pi lleva implementado ese temporizador, vamos a usarlo para reiniciarla en caso de que algo vaya mal.

Lo primero es cargar el módulo del kernel con este comando:
sudo modprobe bcm2708_wdog
A continuación, para que ese módulo se cargue al arranque del sistema, tecleamos:
echo "bcm2708_wdog" | sudo tee -a /etc/modules
 Si os sale el siguiente error al ejecutar el primer comando:
modprobe: FATAL: Module bcm2708_wdog not found.
Los dos comandos a ejecutar son los siguientes:
sudo modprobe bcm2835_wdt
echo "bcm2835_wdt " | sudo tee -a /etc/modules
Instalamos watchdog daemon:
sudo apt-get install watchdog chkconfig
sudo chkconfig watchdog on
Ahora toca configurar el servicio watchdog para los escenarios en los que queremos que reinicie la Raspberry Pi, para ello editamos el archivo watchdog.conf:
sudo nano /etc/watchdog.conf
El archivo se entiende fácilmente y vamos a configurar que nuestra Raspberry Pi se reinicie si la carga de la CPU en un minuto es superior al 24%, para ello le quitamos el # a estas dos lineas que nos deben quedar así y añadimos watchdog-timeout   = 10:
 max-load-1              = 24
 watchdog-device = /dev/watchdog
 watchdog-timeout   = 10
Iniciamos el servicio watchdog:
sudo systemctl start watchdog
 Ahora vamos a probar que todo funciona correctamente, para ello lo primero es asegurarse de que no hay ningún proceso importante corriendo en la Raspberry Pi y vamos a desactivar la partición swap, tecleamos:
sudo swapoff -a
 Y a continuación vamos a probar el funcionamiento del watchdog con una "forkbomb", para ello ejecutamos:
: (){ :|:& };:
Y si todo ha ido bien nuestra Raspberri Pi se habrá reiniciado al cabo de unos segundos.
Si comprobamos el estado del servicio después del reinicio:
sudo systemctl -l status watchdog
Nos encontramos con ésto:
 ● watchdog.service - watchdog daemon
Loaded: loaded (/lib/systemd/system/watchdog.service; static)
Active: inactive (dead)
El sistema no ha cargado el servicio y no lo ha iniciado después del reinicio. Para activarlo y que se inicie después de cada reinicio, seguimos los siguientes pasos:
Copiamos el archivo watchdog.service a la carpeta /etc/systemd/system/:
sudo cp /lib/systemd/system/watchdog.service /etc/systemd/system/
Lo abrimos:
sudo nano  /etc/systemd/system/watchdog.service
A la linea que empieza por  ExecStartPre=... le añadimos al final ' y nos debe quedar así:
ExecStartPre=/bin/sh -c '[ -z "${watchdog_module}" ] || [ "${watchdog_module}" = "none" ] || /sbin/modprobe $watchdog_module'
Y después de la sección [Install] añadimos esta linea:
WantedBy=multi-user.target
Sincronizamos el demonio:
sudo systemctl daemon-reload
Activamos el servicio:
sudo systemctl enable watchdog
Y lo iniciamos:
sudo systemctl start watchdog
Reiniciamos el sistema o ejecutamos la "forkbomb" y cuando se haya reiniciado comprobamos que sigue activo y funcionando:
sudo systemctl -l status watchdog
Si nos sale esto es que está todo correcto y el servicio watchdog funcionará después de cada reinicio:
 ● watchdog.service - watchdog daemon
   Loaded: loaded (/etc/systemd/system/watchdog.service; enabled)
   Active: active (running)
Pues ya podemos despreocuparnos de si nuestra Raspberry Pi se queda colgada y no podemos reiniciarla a mano, lo siguiente será conseguir que nos avise, enviándonos un mail por ejemplo, cuando esto suceda.

Documentación consultada para esta entrada en los foros de Raspberry
 

©2011 Trasteando con Raspberry Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.
Creado a partir de la obra en Trasteando con Raspberry. | FuuTheme diseñado por Fuutec | Ir arriba ↑