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.
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.
- 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.
sudo apt update
sudo apt install rsync ssmtp mailutils
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.
- Habilita la verificación en dos pasos en tu cuenta de Google.
- Ve a https://myaccount.google.com/apppasswords y crea una Contraseña de Aplicación.
- 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
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.
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
chmod +x /home/tu_usuario/backup_con_email.sh
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
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.
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.
- 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
.
- 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.
No dudes en contribuir a este proyecto enviando solicitudes de extracción con mejoras, correcciones de errores o nuevas características.
Este proyecto está licenciado bajo la Licencia MIT.