403Webshell
Server IP : 185.11.201.71  /  Your IP : 192.168.7.18
Web Server : Apache/2.4.29 (Ubuntu)
System : Linux tech-virtual-machine 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64
User : tech ( 1000)
PHP Version : 7.4.28
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /comunica/backups/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /comunica/backups/backup.sh
#!/bin/bash

###############################################################################
# SCRIPT DE BACKUP A NAS SYNOLOGY
#
# - Monta temporalmente la NAS.
# - Genera backup diario de MySQL, webs Apache y carpetas de sistema.
# - Crea copia mensual el día 01 de cada mes.
# - Crea copia anual el día 01 de enero.
# - Mantiene diarios 30 días.
# - Mantiene mensuales 6 meses.
# - Mantiene anuales indefinidamente.
# - Desmonta la NAS al finalizar.
###############################################################################

set -euo pipefail

LOG="/var/log/backup.log"
LOCK="/var/run/backup.lock"

###############################################################################
# CONFIGURACIÓN MYSQL
###############################################################################

BBDDUS="root"
BBDDPW="Machocar02"

###############################################################################
# CONFIGURACIÓN NAS SYNOLOGY
###############################################################################

NAS_IP="192.168.7.95"
NAS_SHARE="SERVIDORES"
NAS_SUBDIR="192.168.7.142"
NAS_MOUNT="/mnt/backup_nas"
NAS_USER="backups"
NAS_PASS="T3ch_1mpuls3!!"

###############################################################################
# FECHAS
###############################################################################

FECHA_DIA="$(date +%Y.%m.%d)"
FECHA_MES="$(date +%Y.%m)"
FECHA_ANIO="$(date +%Y)"
DIA_MES="$(date +%d)"
MES_DIA="$(date +%m%d)"

###############################################################################
# RETENCIÓN
###############################################################################

RETENCION_DIAS=30
RETENCION_MESES=6

###############################################################################
# RUTAS EN NAS
###############################################################################

DESTINO_BASE="${NAS_MOUNT}/${NAS_SUBDIR}"
DESTINO_DIARIO="${DESTINO_BASE}/diarios/${FECHA_DIA}"
DESTINO_MENSUAL="${DESTINO_BASE}/mensuales/${FECHA_MES}"
DESTINO_ANUAL="${DESTINO_BASE}/anuales/${FECHA_ANIO}"

###############################################################################
# EVITAR DOBLE EJECUCIÓN
###############################################################################

exec 9>"$LOCK"
flock -n 9 || {
    echo "$(date) - ERROR: backup ya en ejecución" >> "$LOG"
    exit 1
}

###############################################################################
# DESMONTAJE SEGURO DE LA NAS AL FINALIZAR
###############################################################################

cleanup() {
    sync

    if mountpoint -q "$NAS_MOUNT"; then
        echo "### DESMONTANDO NAS" >> "$LOG"

        umount "$NAS_MOUNT" || {
            echo "$(date) - ERROR: no se pudo desmontar $NAS_MOUNT" >> "$LOG"
        }
    fi
}

trap cleanup EXIT

###############################################################################
# FUNCIÓN PARA GENERAR BACKUP
###############################################################################

crear_backup() {
    DESTINO="$1"

    ###########################################################################
    # Crear estructura del backup
    ###########################################################################

    mkdir -p "$DESTINO/bbdd"
    mkdir -p "$DESTINO/webs"
    mkdir -p "$DESTINO/sistema"

    ###########################################################################
    # Backup de directorios web Apache
    ###########################################################################

    echo "### COPIA WEBS EN $DESTINO" >> "$LOG"

    find /var/www/html -mindepth 1 -maxdepth 1 -type d \
        ! -name "OLD*" \
        ! -name "comunicados" \
    | while read -r WEB; do

        NOMBRE="$(basename "$WEB")"
        echo "WEB: $NOMBRE" >> "$LOG"

        tar -czf "$DESTINO/webs/${NOMBRE}.tar.gz" -C /var/www/html "$NOMBRE"
    done

    ###########################################################################
    # Backup de carpetas de sistema
    ###########################################################################

    echo "### COPIA SISTEMA EN $DESTINO" >> "$LOG"

    [ -d /etc/apache2 ] && tar -czf "$DESTINO/sistema/etcapache.tar.gz" -C /etc apache2
    [ -d /home ] && tar -czf "$DESTINO/sistema/home.tar.gz" -C / home
    [ -d /comunica ] && tar -czf "$DESTINO/sistema/comunica.tar.gz" -C / comunica
}

###############################################################################
# INICIO DEL SCRIPT
###############################################################################

echo "######################" >> "$LOG"
date >> "$LOG"
echo "INICIO COPIA" >> "$LOG"

###############################################################################
# Crear punto de montaje local
###############################################################################

mkdir -p "$NAS_MOUNT"

###############################################################################
# Montar NAS Synology
###############################################################################

echo "### MONTANDO NAS" >> "$LOG"

mount -t cifs "//${NAS_IP}/${NAS_SHARE}" "$NAS_MOUNT" \
    -o "username=${NAS_USER},password=${NAS_PASS},iocharset=utf8,vers=3.0,file_mode=0600,dir_mode=0700,noperm"

###############################################################################
# Verificar que la NAS está montada
###############################################################################

if ! mountpoint -q "$NAS_MOUNT"; then
    echo "$(date) - ERROR: la NAS no se ha montado correctamente" >> "$LOG"
    exit 1
fi

###############################################################################
# Crear estructura base en la NAS
###############################################################################

mkdir -p "${DESTINO_BASE}/diarios"
mkdir -p "${DESTINO_BASE}/mensuales"
mkdir -p "${DESTINO_BASE}/anuales"

###############################################################################
# Crear backup diario
###############################################################################

crear_backup "$DESTINO_DIARIO"

###############################################################################
# Crear backup mensual
###############################################################################

if [ "$DIA_MES" = "01" ]; then
    echo "### GENERANDO COPIA MENSUAL" >> "$LOG"

    rm -rf "$DESTINO_MENSUAL"
    cp -a "$DESTINO_DIARIO" "$DESTINO_MENSUAL"
fi

###############################################################################
# Crear backup anual
###############################################################################

if [ "$MES_DIA" = "0101" ]; then
    echo "### GENERANDO COPIA ANUAL" >> "$LOG"

    rm -rf "$DESTINO_ANUAL"
    cp -a "$DESTINO_DIARIO" "$DESTINO_ANUAL"
fi

###############################################################################
# Rotación de backups diarios
###############################################################################

echo "### ROTACION DIARIA: manteniendo ${RETENCION_DIAS} dias" >> "$LOG"

find "${DESTINO_BASE}/diarios" \
    -mindepth 1 \
    -maxdepth 1 \
    -type d \
    -mtime +"$RETENCION_DIAS" \
    -exec rm -rf {} \;

###############################################################################
# Rotación de backups mensuales
###############################################################################

echo "### ROTACION MENSUAL: manteniendo ${RETENCION_MESES} meses" >> "$LOG"

find "${DESTINO_BASE}/mensuales" \
    -mindepth 1 \
    -maxdepth 1 \
    -type d \
    -mtime +180 \
    -exec rm -rf {} \;

###############################################################################
# Backups anuales
###############################################################################

# No se eliminan. Se mantienen indefinidamente.

###############################################################################
# FIN DEL SCRIPT
###############################################################################

date >> "$LOG"
echo "FIN COPIA" >> "$LOG"

exit 0


Youez - 2016 - github.com/yon3zu
LinuXploit