Skip to content

Este repositorio proporciona un script en Bash para automatizar copias de seguridad de directorios específicos en sistemas Linux, excluyendo carpetas innecesarias (por ejemplo, node_modules), y enviando notificaciones por correo electrónico a través de SSMTP.

Notifications You must be signed in to change notification settings

herwingxtech/linux-backup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

⚙️ Script de Respaldo Automatizado con Rsync, SSMTP y Anacron

Este repositorio proporciona un script en Bash para automatizar copias de seguridad de directorios específicos en sistemas Linux, excluyendo carpetas innecesarias (por ejemplo, node_modules), y enviando notificaciones por correo electrónico a través de SSMTP. Utiliza rsync para copias de seguridad eficientes, ssmtp para la entrega de correo electrónico y anacron para garantizar que las copias de seguridad se ejecuten incluso si el sistema no está continuamente en línea.

🎯 Propósito

El objetivo es crear una solución de respaldo confiable y automatizada para desarrolladores que desean proteger sus archivos y configuraciones importantes sin administrar manualmente el proceso.

🔩 Requisitos Técnicos

  • SO basado en Linux: Probado principalmente en distribuciones basadas en Ubuntu y Debian.
  • Bash: El script está escrito en Bash.
  • rsync: Utilidad de sincronización de archivos.
  • ssmtp: Cliente simple de protocolo de transferencia de correo.
  • mailutils: Utilidades para enviar correos electrónicos desde la línea de comandos.
  • Cuenta de Gmail (o servidor SMTP alternativo): Para enviar notificaciones por correo electrónico.

📦 Instalación y Configuración

1. Instalar Dependencias

sudo apt update
sudo apt install rsync ssmtp mailutils

2. Configurar SSMTP

SSMTP se utiliza para retransmitir notificaciones por correo electrónico. Edita /etc/ssmtp/ssmtp.conf:

sudo nano /etc/ssmtp/ssmtp.conf

Actualiza las siguientes configuraciones (reemplaza [email protected] con tu dirección de Gmail real):

[email protected]
mailhub=smtp.gmail.com:587
rewriteDomain=gmail.com
hostname=tu_maquina  # Puede ser cualquier nombre
FromLineOverride=YES
UseTLS=YES
UseSTARTTLS=YES
[email protected]
AuthPass=tu_contraseña_app # Reemplaza con la Contraseña de Aplicación

Importante: Gmail requiere una Contraseña de Aplicación por seguridad.

  1. Habilita la verificación en dos pasos en tu cuenta de Google.
  2. Ve a https://myaccount.google.com/apppasswords y crea una Contraseña de Aplicación.
  3. Utiliza esta Contraseña de Aplicación en la configuración AuthPass.

A continuación, configura /etc/ssmtp/revaliases:

sudo nano /etc/ssmtp/revaliases

Añade la siguiente línea, reemplazando los marcadores de posición en consecuencia:

usuario:[email protected]:smtp.gmail.com:587
root:[email protected]:smtp.gmail.com:587

3. Script de Respaldo (backup_con_email.sh)

Crea un archivo llamado backup_con_email.sh en tu directorio de inicio (/home/tu_usuario) y pega el siguiente código:

#!/bin/bash

# Configuración
SOURCE_DIRS="/home/tu_usuario/web"  # Directorios a respaldar (separados por espacios)
DESTINATION="/mnt/d/Backup Ubuntu/respaldo_$(date +%Y%m%d)"  # Directorio de destino de la copia de seguridad
EXCLUDE_FILE="/home/tu_usuario/exclude.txt"  # Lista de exclusión
LOG_FILE="/home/tu_usuario/backup.log"  # Ruta del archivo de registro
EMAIL_ADDRESS="[email protected]"  # Correo electrónico para las notificaciones

# Crear el directorio de destino
mkdir -p "$DESTINATION"

# Iniciar el registro
echo "Iniciando respaldo: $(date)" > "$LOG_FILE"

# Ejecutar rsync para cada directorio de origen y registrar la salida
for SOURCE_DIR in $SOURCE_DIRS; do
  rsync -av --delete --exclude-from="$EXCLUDE_FILE" "$SOURCE_DIR" "$DESTINATION" >> "$LOG_FILE" 2>&1
done

# Comprobar el estado de la copia de seguridad
if [ $? -eq 0 ]; then
  echo "Copia de seguridad exitosa: $(date)" >> "$LOG_FILE"
  MESSAGE="Copia de seguridad exitosa el $(date)"
else
  echo "Error en la copia de seguridad: $(date)" >> "$LOG_FILE"
  MESSAGE="Error en la copia de seguridad el $(date). Revisa el archivo de registro: $LOG_FILE"
fi

# Enviar notificación por correo electrónico
echo "$MESSAGE" | mail -s "Estado de la Copia de Seguridad" "$EMAIL_ADDRESS"

# Opcional: Limpiar las copias de seguridad antiguas (conservar las últimas 7)
# find /mnt/d/Backup Ubuntu/ -maxdepth 1 -type d -name "respaldo_*" -ctime +7 -exec rm -rf {} \;

Importante: Personaliza las variables SOURCE_DIRS, DESTINATION, EXCLUDE_FILE y EMAIL_ADDRESS según tu entorno.

4. Lista de Exclusión (exclude.txt)

Crea un archivo llamado exclude.txt en tu directorio de inicio (/home/tu_usuario) y añade patrones para los archivos/directorios que se excluirán de la copia de seguridad. Por ejemplo:

node_modules/
.cache/
*.log
*.tmp

5. Hacer que el Script sea Ejecutable

chmod +x /home/tu_usuario/backup_con_email.sh

6. Automatizar con cron

Para programar la ejecución automática del script, edita el crontab:

crontab -e

Añade una línea como esta (para la ejecución diaria a las 2:00 AM):

0 2 * * * /home/tu_usuario/backup_con_email.sh

7. Gestionar Sistemas Fuera de Línea con anacron

Para los sistemas que no están continuamente en línea, utiliza anacron para asegurar que las copias de seguridad se realicen.

Edita /etc/anacrontab:

sudo nano /etc/anacrontab

Añade una línea como esta:

1       15       backup_script   /home/tu_usuario/backup_con_email.sh
  • 1: Frecuencia en días (cada 1 día).
  • 15: Retraso en minutos después del inicio del sistema (15 minutos).
  • backup_script: Nombre único para la tarea.

8. Probar el Script

Ejecuta el script manualmente para verificar el funcionamiento correcto:

/home/tu_usuario/backup_con_email.sh

Comprueba:

  • El directorio de copia de seguridad para los archivos creados.
  • La bandeja de entrada del correo electrónico para la notificación.
  • El archivo de registro (/home/tu_usuario/backup.log) en busca de errores.

🧪 Pruebas

  • Simula un escenario en el que el sistema está fuera de línea durante el tiempo programado de cron.
  • Verifica que la copia de seguridad se ejecute cuando el sistema se enciende y se ejecuta anacron.

🛠️ Personalización

  • Cifrado: Añade cifrado utilizando gpg o herramientas similares.
  • Almacenamiento en la Nube: Integra con proveedores de almacenamiento en la nube (por ejemplo, AWS S3, Google Cloud Storage).
  • Registro Avanzado: Implementa un registro más detallado para una mejor supervisión.

🤝 Contribución

No dudes en contribuir a este proyecto enviando solicitudes de extracción con mejoras, correcciones de errores o nuevas características.

📝 Licencia

Este proyecto está licenciado bajo la Licencia MIT.

About

Este repositorio proporciona un script en Bash para automatizar copias de seguridad de directorios específicos en sistemas Linux, excluyendo carpetas innecesarias (por ejemplo, node_modules), y enviando notificaciones por correo electrónico a través de SSMTP.

Topics

Resources

Stars

Watchers

Forks