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.

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 queprevio seal vayasábado ay hacer el cambio de hora los domingosdomingo de cambio horario. 
  • Si el domingo de cambio horario el equipo no tiene encendido, salta al siguiente día disponible.
  • 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 queprevio seal vayasábado ay hacer el cambio de hora los domingosdomingo de cambio horario. 
  • Si el domingo de cambio horario el equipo no tiene encendido, salta al siguiente día disponible.
  • 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