Skip to main content

🧩 Cambio de Hora

El script timeChange.sh es un gestor de cambios horarios y respaldos para varios subdominios de la plataforma. Ejecuta de forma automatizada las URL de los scripts PHP correspondientes a cada tienda para cambiar la hora, hacer respaldos o restaurarlos.

Debe ir en un Súper Ordenador.Ordenador.

Funciona para los domingos de cambio horario, si no abre la tienda o cliente el domingo, lo ejecuta el siguiente día disponible.

Espera 72 Horas si se ejecuta un viernes para que la restauración de horarios no se haga antes del propio cambio.

----------------------------------------------------------------------------------------------------------------------------------------------

Canales Corporativos Compatibles:

  • Comunicación Visual Canarias: Panel
  • Spar Gran Canaria
  • Frigo Martel
  • Pizza Royers
  • Cash Converters

----------------------------------------------------------------------------------------------------------------------------------------------

Ejecución en terminal del Súper Ordenador:

MODO VERANO

nohup bash /home/cvc/timeChange/timeChange.sh verano >> /home/cvc/timeChange/timeChange.out 2>&1 &

  • Ejecutar el viernes que se vaya a hacer el cambio de hora los domingos de cambio horario. 72 Horas después restablecerá los horarios.
  • [Guardar Respaldo -> 10 Segundos -> Sumar una hora apertura del domingo -> 72 Horas -> Cargar Respaldo]

MODO INVIERNO

nohup bash /home/cvc/timeChange/timeChange.sh invierno >> /home/cvc/timeChange/timeChange.out 2>&1 &

  • Ejecutar el viernes que se vaya a hacer el cambio de hora los domingos de cambio horario. 72 Horas después restablecerá los horarios.
  • [Guardar Respaldo -> 10 Segundos -> Restar una hora apertura del domingo -> 72 Horas -> Cargar Respaldo]

REGISTRO DE EJECUCIÓN

tail -f /home/cvc/timeChange/timeChange.log

  • Revisa la fecha y hora de ejecución de cualquier modo del script.

GUARDAR RESPALDO DE HORARIOS

bash /home/cvc/timeChange/timeChange.sh guardar

  • Guarda un respaldo de los horarios de todos los clientes y subdominios.

CARGAR RESPALDO DE HORARIOS

bash /home/cvc/timeChange/timeChange.sh cargar

  • Carga el respaldo de los horarios de todos los clientes y subdominios.

SUMAR UNA HORA A TODOS LOS CLIENTES

bash /home/cvc/timeChange/timeChange.sh +1

  • Suma una hora a las apertura en los horarios de todos los clientes y subdominios en los domingos y posteriores de cambio horario.

RESTAR UNA HORA A TODOS LOS CLIENTES

bash /home/cvc/timeChange/timeChange.sh -1

  • Resta una hora a las apertura en los horarios de todos los clientes y subdominios en los domingos y posteriores de cambio horario.

MODO TEST

nohup bash /home/cvc/timeChange/timeChange.sh test >> /home/cvc/timeChange/timeChange.out 2>&1 &

  • Modo test no hace ningún cambio en la base de datos ni en los canales corporativos. 72 Horas después debe confirmar nueva ejecución. Su función principal es ver si el script se mantiene activo hasta pasadas las horas previstas para comprobar si los modos funcionarían adecuadamente.

----------------------------------------------------------------------------------------------------------------------------------------------

Requisitos obligatorios:

  • Carpeta llamada "timeChange" dentro de "home - > cvc"
  • Dentro de la carpeta, el script que se llamará "timeChange" con formato .sh

#!/bin/bash
# ============================================================
# Script: timeChange.sh
# Descripción: Ejecuta backups, cambio horario (verano/invierno)
#              restore, modos de prueba y cambios directos (+1/-1)
# ============================================================

LOG_FILE="/home/cvc/timeChange/timeChange.log"
WAIT_BETWEEN_PHASES=10       # segundos de espera entre fases
REVERSE_HOURS=72             # horas hasta restore / job diferido
DATE_NOW=$(date '+%Y-%m-%d %H:%M:%S')

# Limpiar log en cada ejecución directa (no cuando viene de at)
if [[ "$1" != "cargar" && "$1" != "test_scheduled" ]]; then
    echo "==============================" > "$LOG_FILE"
    echo "🕓 Inicio de ejecución — $DATE_NOW" >> "$LOG_FILE"
    echo "==============================" >> "$LOG_FILE"
fi

# URLs de tiendas
URLS_BACKUP=( 
"https://panel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=backup"
"https://spar.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=backup"
"https://frigomartel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=backup"
"https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=backup"
"https://cashconverters.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=backup"
)

URLS_RESTORE=(
"https://panel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=restore"
"https://spar.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=restore"
"https://frigomartel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=restore"
"https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=restore"
"https://cashconverters.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=restore"
)

URLS_SUMMER=(
"https://panel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=summer"
"https://spar.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=summer"
"https://frigomartel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=summer"
"https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=summer"
"https://cashconverters.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=summer"
)

URLS_WINTER=(
"https://panel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=winter"
"https://spar.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=winter"
"https://frigomartel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=winter"
"https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=winter"
"https://cashconverters.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=winter"
)

URLS_TEST=(
"https://panel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=test"
"https://spar.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=test"
"https://frigomartel.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=test"
"https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=test"
"https://cashconverters.comunicacionvisualcanarias.com/_scripts/cambioHora.php?action=test"
)

# Funciones
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

execute_urls() {
    local urls=("$@")
    for url in "${urls[@]}"; do
        curl -s "$url" >/dev/null 2>&1 &
    done
    wait
}

finish_log() {
    log "✅ Finalización completa — $(date '+%Y-%m-%d %H:%M:%S')"
    echo "------------------------------" >> "$LOG_FILE"
}

# ============================================================
# EJECUCIÓN SEGÚN ARGUMENTO
# ============================================================

if [ -z "$1" ]; then
    log "❌ Uso: $0 [verano|invierno|guardar|cargar|+1|-1|test]"
    exit 1
fi

ACTION=$1

# -------------------------------
# SOLO BACKUP
# -------------------------------
if [ "$ACTION" == "guardar" ]; then
    log "📦 Ejecutando solo BACKUP..."
    execute_urls "${URLS_BACKUP[@]}"
    log "✅ BACKUP completado."
    finish_log
    exit 0
fi

# -------------------------------
# SOLO RESTORE
# -------------------------------
if [ "$ACTION" == "cargar" ]; then
    log "♻️ Ejecutando solo RESTORE..."
    execute_urls "${URLS_RESTORE[@]}"
    log "✅ RESTORE completado."
    finish_log
    exit 0
fi

# -------------------------------
# CAMBIO DIRECTO +1 / -1
# -------------------------------
if [ "$ACTION" == "+1" ]; then
    log "🌞 Ejecutando cambio horario +1..."
    execute_urls "${URLS_SUMMER[@]}"
    log "✅ Cambio horario +1 completado."
    finish_log
    exit 0
fi

if [ "$ACTION" == "-1" ]; then
    log "❄️ Ejecutando cambio horario -1..."
    execute_urls "${URLS_WINTER[@]}"
    log "✅ Cambio horario -1 completado."
    finish_log
    exit 0
fi

# -------------------------------
# MODO TEST — programación con 72 horas
# -------------------------------
if [ "$ACTION" == "test" ]; then
    log "🧪 Ejecutando modo TEST..."
    execute_urls "${URLS_TEST[@]}"
    log "✅ URLs de test ejecutadas ahora."

    log "⏳ Programando ejecución diferida con at dentro de $REVERSE_HOURS horas..."
    TEST_COMMAND="bash /home/cvc/timeChange/timeChange.sh test_scheduled >> /home/cvc/timeChange/timeChange.log 2>&1"
    echo "$TEST_COMMAND" | at now + $REVERSE_HOURS hours
    log "📅 Comando programado con 'at' para reejecutar test."
    finish_log
    exit 0
fi

# -------------------------------
# MODO TEST PROGRAMADO AUTOMÁTICO
# -------------------------------
if [ "$ACTION" == "test_scheduled" ]; then
    log "🚀 Ejecución iniciada automáticamente por 'at'"
    log "🔁 Ejecución programada del modo TEST..."
    execute_urls "${URLS_TEST[@]}"
    log "✅ URLs de test ejecutadas (programadas)."
    finish_log
    exit 0
fi

# -------------------------------
# CAMBIO HORARIO COMPLETO (verano/invierno)
# -------------------------------
if [[ "$ACTION" == "verano" || "$ACTION" == "invierno" ]]; then
    log "📦 Iniciando BACKUP (todas las tiendas)..."
    execute_urls "${URLS_BACKUP[@]}"
    log "✅ BACKUP completado."
    sleep $WAIT_BETWEEN_PHASES

    if [ "$ACTION" == "verano" ]; then
        log "🌞 Ejecutando CAMBIO HORARIO VERANO..."
        execute_urls "${URLS_SUMMER[@]}"
    else
        log "❄️ Ejecutando CAMBIO HORARIO INVIERNO..."
        execute_urls "${URLS_WINTER[@]}"
    fi
    log "✅ Cambio horario completado."

    log "⏳ Programando RESTORE dentro de $REVERSE_HOURS horas..."
    RESTORE_COMMAND="bash /home/cvc/timeChange/timeChange.sh cargar >> /home/cvc/timeChange/timeChange.log 2>&1"
    echo "$RESTORE_COMMAND" | at now + $REVERSE_HOURS hours

    log "🏁 Proceso completo programado. Revisa log para seguimiento."
    finish_log
    exit 0
fi