Controlar que todos los servicios de la Raspberry se están ejecutando correctamente, es un trabajo enorme. Hay una manera que la Raspberry se comunique con nosotros cuando algo no vaya del todo bien, y es utilizar un bot de Telegram.
El primer paso es crear el bot que vamos a utilizar. Puedes seguir este artículo que utilicé para la utilización de un bot en OpenHAB.
Cuando tengamos nuestra API_KEY y nuestro CHAT_ID, creamos un directorio en /etc/telegram como root:
sudo mkdir /etc/telegramY creamos el siguiente archivo:
sudo nano /etc/telegram/key.shexport TELEGRAM_KEY="API_KEY"
export CHAT_ID=CHAT_IDAhora creamos el script que enviará el mensaje:
sudo nano /usr/local/bin/telegram.sh#!/bin/bash
source /etc/telegram/key.sh
URL="https://api.telegram.org/bot$TELEGRAM_KEY/sendMessage"
curl -s -d "chat_id=$CHAT_ID&disable_web_page_preview=1&text=$1" $URL > /dev/nullLe damos acceso de ejecución:
sudo chmod +x /usr/local/bin/telegram.shY podemos probarlo desde cualquier ubicación y con nuestro usuario:
telegram.sh "¡Hola! He llegado, soy tu servidor"A partir de ahora, podemos utilizarlo para que nos informe de cualquier cosa que suceda en nuestro servidor.
Modificamos el archivo .bashrc y añadimos al final la línea siguiente:
nano .bashrctelegram.sh "Nueva conexión SSH con la IP $(echo $SSH_CLIENT | awk '{ print $1}')"telegram.sh $(/opt/vc/bin/vcgencmd measure_temp)El procedimiento anterior podemos utilizarlo, por ejemplo, para que nos informe de cualquier error en la ejecución de cualquier servicio. Para ello, vamos a crear el fichero:
sudo nano /usr/local/bin/unit-status-telegram.sh#!/bin/bash
UNIT=$1
UNITSTATUS=$(systemctl status $UNIT)
ALERT=$(echo -e "\u26A0")
telegram.sh "$ALERT Unit failed $UNIT $ALERT Status: $UNITSTATUS"Le damos acceso de ejecución:
sudo chmod +x /usr/local/bin/unit-status-telegram.shY lo podemos probar, por ejemplo, con el siguiente comando:
unit-status-telegram.sh systemd-journaldY casi al instante, nos debería llegar un mensaje a nuestro Telegram, con toda la información.
Ahora sólo nos queda crear la unidad en systemd que se activará en caso de error:
sudo nano /etc/systemd/system/unit-status-telegram@.service[Unit]
Description=Unit Status Telegram Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/unit-status-telegram.sh %I¡Listo! Ahora solo tenemos que añadir en la sección [Unit] del servicio que queremos controlar la siguiente línea:
OnFailure=unit-status-telegram@%n.serviceEstos servicios son algunos ejemplos que hemos visto en algún momento:
/etc/systemd/system/arch-audit.service
/etc/systemd/system/autoupdate.service
/etc/systemd/system/lynis.service
/etc/systemd/system/certbot.service
/etc/systemd/system/rkhunter-email.servicesudo nano /etc/systemd/system/shutdown_msg.service[Unit]
Description=Send message to shutdown
OnFailure=unit-status-telegram@%n.service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=telegram.sh "Sorry, the server is going down..."
[Install]
WantedBy=multi-user.targetNos aseguramos de activar y recargar:
sudo systemctl enable shutdown_msg.service --now
sudo systemctl daemon-reloadsudo nano /etc/systemd/system/start_msg.service[Unit]
Description=Send message after network becomes reachable
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=telegram.sh "Hi, the server is now becomes reacheable... "
TimeoutStartSec=0
[Install]
WantedBy=default.targetNos aseguramos de activar y recargar:
sudo systemctl enable start_msg.service --now
sudo systemctl daemon-reloadCon esta configuración ya tienes un sistema completo de notificaciones que te avisará sobre:
Tu Raspberry Pi ahora te mantendrá informado de todo lo que sucede, permitiéndote reaccionar rápidamente ante cualquier problema. ¡Hello, it's me, everything's all right here! 📱