Dentro de la monitorización de servicios, un buen uso es el de cronjobs con correo.
Tienes más info sobre cronjobs en:
Un requisito indispensable para que funcione esto es tener postfix y mailutils en el servidor por lo que te recomiendo te mires la siguiente guia: Mailing
Ejemplo 1) Enviar un correo con un reporte diario
Este cronjob enviará un correo con la fecha y hora actuales usando mail.
Creamos un script:
nano ~/reporte_diario.sh
Añade este contenido:
#!/bin/bash
# Variables
FECHA=$(date "+%Y-%m-%d")
HORA=$(date "+%H:%M:%S")
DESTINATARIO="admin@example.com"
ASUNTO="Reporte Diario - $FECHA"
MENSAJE="Hola, este es el reporte diario. La hora actual es: $HORA"
# Enviar correo
echo "$MENSAJE" | mail -s "$ASUNTO" "$DESTINATARIO"
Guarda (Ctrl + X, Y, Enter) y dale permisos de ejecución:
chmod +x ~/reporte_diario.sh
Agregar el cronjob para que se ejecute todos los días a las 8 AM:
crontab -e
Añade esta línea:
0 8 * * * ~/reporte_diario.sh
Ejemplo 2) Enviar un correo si el servidor está casi sin espacio
Este cronjob revisa si el espacio en disco es menor al 10% y envía una alerta.
Crea el script:
nano ~/check_espacio.sh
Añade este contenido:
#!/bin/bash
# Variables
DISPONIBLE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
DESTINATARIO="admin@example.com"
FECHA=$(date "+%Y-%m-%d %H:%M:%S")
# Si el espacio en disco es menor al 10%, enviar alerta
if [ "$DISPONIBLE" -ge 90 ]; then
ASUNTO="ALERTA: Espacio en disco bajo ($DISPONIBLE%)"
MENSAJE="Atención: El servidor tiene solo un $((100-DISPONIBLE))% de espacio libre. Fecha: $FECHA"
echo "$MENSAJE" | mail -s "$ASUNTO" "$DESTINATARIO"
fi
Guarda (Ctrl + X, Y, Enter) y da permisos de ejecución
chmod +x ~/check_espacio.sh
Agregar el cronjob para revisar cada hora
crontab -e
Añade esta línea:
0 * * * * ~/check_espacio.sh
Ejemplo 3) Enviar un correo si un servicio está caído
Este cronjob revisa si Nginx está funcionando y envía un correo si no lo está, ten en cuenta que, obviamente esto no funcionará para servicios como bind9, postfix o dovecot; pero si para docker o mysql.
Primero, creamos el script
nano ~/check_nginx.sh
Añade este contenido:
#!/bin/bash
# Variables
SERVICIO="nginx"
DESTINATARIO="admin@example.com"
FECHA=$(date "+%Y-%m-%d %H:%M:%S")
# Verificar si Nginx está corriendo
if ! systemctl is-active --quiet $SERVICIO; then
ASUNTO="ALERTA: $SERVICIO está caído - $FECHA"
MENSAJE="El servicio $SERVICIO ha dejado de funcionar en el servidor. Fecha: $FECHA"
echo "$MENSAJE" | mail -s "$ASUNTO" "$DESTINATARIO"
fi
Guarda (Ctrl + X, Y, Enter) y da permisos de ejecución
chmod +x ~/check_nginx.sh
Agregamos el cronjob para que revise cada 5 minutos
crontab -e
Añade esta línea:
*/5 * * * * ~/check_nginx.sh
Verificar que los cronjobs funcionan
Para listar las tareas de cron configuradas:
crontab -l
Para revisar si se están enviando los correos, revisa el log del correo: