Hello, it's me. Everything's All Right Here

Comunicandose con nostros

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.


Necesitamos un bot

El primer paso es crear el bot que vamos a utilizar. Puedes seguir este articulo que utilice para la utilización de un bot en Openhab2.

Configurando los ficheros

Cuando tengamos nuestra API_KEY y nuestro CHAT_ID, creamos un directorio en /etc/telegram como root:

sudo mkdir /etc/telegram

y creamos el siguiente archivo:

sudo nano /etc/telegram/key.sh
export TELEGRAM_KEY="API_KEY"
export CHAT_ID=CHAT_ID

Ahora creamos el script que enviara 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/null

Le damos acceso de ejecución:

sudo chmod +x /usr/local/bin/telegram.sh

Y 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.

Avisos de nuevas conexiones SSH

Modificamos el archivo .bashrc y añadimos al final la linea siguiente:

nano .bashrc
telegram.sh "Nueva conexión SSH con la IP $(echo $SSH_CLIENT | awk '{ print $1}')"

Tomar la temperatura

telegram.sh $(/opt/vc/bin/vcgencmd measure_temp)

Controlar Systemd

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.sh

Y lo podemos probar, por ejemplo, con el siguiente comando:

unit-status-telegram.sh systemd-journald

Y 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

Y ¡listo! Ahora solo tenemos que añadir en la sección [Unit] del servicio que queremos controlar siguiente linea:

OnFailure=unit-status-telegram@%n.service

Estos servicios son los 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.service

Shutdown, reboot

sudo 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.target

Nos aseguramos de activar y recargar:

sudo systemctl enable shutdown_msg.service --now
sudo systemctl daemon-reload

Al estar disponible

sudo 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.target

Nos aseguramos de activar y recargar:

sudo systemctl enable start_msg.service --now
sudo systemctl daemon-reload

[featured]:

Soy Jaume Ferré, aficionado a los nuevas tecnologias, aunque ya no lo son tanto.
¡Gracias por leerme!

Valora este artículo1 2 3 4 5 (0 votos)

(0 votos)

Categorias del blog

twitter

Últimos tweets