#!/bin/bash

# VARIABLES DE EJEMPLO, CAMBIAR CON VUESTROS DATOS
ORIGEN="/ruta/directorio/origen"
DESTINO="USUARIO@SERVIDOR:/ruta/directorio/destino"
USUARIO="USUARIO"
SERVIDOR="SERVIDOR"
LOG_ARCHIVO="/var/log/backup.log"
FECHA=$(date  +%Y%m%d_%H%M%S)
DIAS=7

# FUNCION CON LA QUE RECIVIREMOS LOGS EN EL DIRECTORIO MARCADO EN LA VARIABLE "LOG_ARCHIVO"
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_ARCHIVO"
}

# FUNCION PARA RECIVIR ERRORES
error_exit() {
    log "ERROR: $1"
    exit 1
}

# INICIO DE SCRIPT

# VERIFICACION DE RSYNC
command -v rsync >/dev/null 2>&1 || error_exit "Rsync no instalado."

# VERIFICACION DE CONEXION SSH 
log "Intentando conexion SSH..."
ssh -o ConnectTimeout=5 -o BatchMode=yes "$USUARIO@$SERVIDOR" "echo 'Conexion Completada'" || error_exit "Conexion no establecida"

# CREACION DE DIRECTORIOS PARA BACKUP CON FECHAS
log "Creando directorio para backup..."
ssh "$USUARIO@$SERVIDOR" "mkdir -p $DESTINO/$FECHA"

# SINCRONIZACION DE BACKUP
log "Iniciando backup..."
rsync -avz --delete -e ssh --exclude='.cache' --exclude='*.tmp' "$ORIGEN/" "$USUARIO@$SERVIDOR:$DESTINO/$FECHA/" && log "Backup OK: $FECHA" || error_exit "Fallo rsync"

# CONDICIONAL PARA VERIFICAR QUE BACKUPS LLEVAN MAS DE X DIAS
if [ $? -eq 0 ]; then
	log "Backup completado con exito: $FECHA"
	log "Limpiando backups mayores a $DIAS dias..."
	ssh "$USUARIO@$SERVIDOR" "find $DESTINO -maxdepth 1 -type d -mtime +$DIAS -exec rm -rf {} +"
else
	error_exit "Fallo en el backup"
fi

# FINAL DEL SCRIPT
log "Backup terminado"
exit 0
