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# VariablesFECHA=$(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 correoecho"$MENSAJE"|mail-s"$ASUNTO""$DESTINATARIO"
Guarda (Ctrl + X, Y, Enter) y dale permisos de ejecución:
Agregar el cronjob para que se ejecute todos los días a las 8 AM:
Añade esta línea:
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:
Añade este contenido:
Guarda (Ctrl + X, Y, Enter) y da permisos de ejecución
Agregar el cronjob para revisar cada hora
Añade esta línea:
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
Añade este contenido:
Guarda (Ctrl + X, Y, Enter) y da permisos de ejecución
Agregamos el cronjob para que revise cada 5 minutos
Añade esta línea:
Verificar que los cronjobs funcionan
Para listar las tareas de cron configuradas:
Para revisar si se están enviando los correos, revisa el log del correo:
#!/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
chmod +x ~/check_espacio.sh
crontab -e
0 * * * * ~/check_espacio.sh
nano ~/check_nginx.sh
#!/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