Bash Avanzado: Automatización de Backups con rsync y cron en Ubuntu Server

Bash Avanzado

Introducción

Los backups automatizados son esenciales para proteger datos críticos en servidores. En esta guía, combinaremos rsync (para copias eficientes) y cron (para programación) en un script Bash, agregando notificaciones por email con mailutils.


1. Configuración Inicial

Requisitos

  • Ubuntu Server 22.04 LTS o superior.
  • Acceso root o sudo.
  • Paquetes instalados:bashCopyDownloadsudo apt update && sudo apt install rsync mailutils -y

2. Script de Backup con rsync

Código completo

#!/bin/bash
# Script: /usr/local/bin/backup_manager.sh

# Directorios de origen y destino
ORIGEN="/var/www/html"
DESTINO="/backups/web_backup_$(date +'%Y%m%d')"

# Opciones de rsync
rsync -avzP --delete "$ORIGEN" "$DESTINO" \
  --log-file="/var/log/backup_$(date +'%F').log"

# Verificación y notificación
if [ $? -eq 0 ]; then
  echo "Backup completado: $(date)" | mail -s "Éxito: Backup $(date +'%F')" admin@example.com
else
  echo "Error en el backup: $(date)" | mail -s "Fallo: Backup $(date +'%F')" admin@example.com
fi

Explicación

  • -avzP: Archivos comprimidos (-z), modo verbose (-v), y progreso (-P).
  • --delete: Elimina archivos en el destino que ya no existen en el origen.
  • $(date +'%Y%m%d'): Formato de fecha para carpetas únicas.

3. Programación con cron

Editar crontab

sudo crontab -e

Agregar esta línea para ejecutar el script diariamente a las 2 AM:

0 2 * * * /usr/local/bin/backup_manager.sh

4. Configurar Notificaciones por Email

Instalar y probar mailutils

echo "Test de notificación" | mail -s "Prueba de email" admin@example.com

Nota: Configura /etc/postfix/main.cf si usas un SMTP externo.


5. Monitoreo y Logs

  • Verifica logs en /var/log/backup_*.log.

Conclusión

Este flujo automatizado garantiza:
✅ Eficienciarsync solo transfiere cambios (ahorro de ancho de banda).
✅ Confiabilidad: Notificaciones inmediatas vía email.
✅ Auditoría: Logs detallados para troubleshooting.

Recursos Adicionales

Leave a Reply

Your email address will not be published. Required fields are marked *