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