# 🧩 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.

<span style="text-decoration: underline;">Debe ir en un [Súper Ordenador](https://documentacion.comunicacionvisualcanarias.com/books/mesh-central-cvc-control-remoto/page/super-ordenador "💻 Súper Ordenador").</span>

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.

\----------------------------------------------------------------------------------------------------------------------------------------------

<p class="callout warning">**Canales Corporativos Compatibles:**</p>

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

\----------------------------------------------------------------------------------------------------------------------------------------------

<p class="callout info">**Ejecución en terminal del Súper Ordenador:**</p>

**MODO VERANO**

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

- <span style="color: rgb(52, 73, 94);">Ejecutar el <span style="text-decoration: underline;">**viernes**</span> previo al sábado y domingo de cambio horario. </span>
- <span style="color: rgb(52, 73, 94);">Si el domingo de cambio horario el equipo no tiene encendido, salta al siguiente día disponible.</span>
- <span style="color: rgb(52, 73, 94);">72 Horas después restablecerá los horarios. </span>
- <span style="color: rgb(132, 63, 161);">\[Guardar Respaldo -&gt; 10 Segundos -&gt; Sumar una hora apertura del domingo -&gt; 72 Horas -&gt; Cargar Respaldo\]</span>

**MODO INVIERNO**

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

- <span style="color: rgb(52, 73, 94);">Ejecutar el <span style="text-decoration: underline;">**viernes**</span> previo al sábado y domingo de cambio horario. </span>
- <span style="color: rgb(52, 73, 94);">Si el domingo de cambio horario el equipo no tiene encendido, salta al siguiente día disponible.</span>
- <span style="color: rgb(52, 73, 94);">72 Horas después restablecerá los horarios.</span>
- <span style="color: rgb(132, 63, 161);">\[Guardar Respaldo -&gt; 10 Segundos -&gt; Restar una hora apertura del domingo -&gt; 72 Horas -&gt; Cargar Respaldo\]</span>

**REGISTRO DE EJECUCIÓN**

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

- <span style="color: rgb(52, 73, 94);">Revisa la fecha y hora de ejecución de cualquier modo del script.</span>

**GUARDAR RESPALDO DE HORARIOS**

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

- <span style="color: rgb(52, 73, 94);">Guarda un respaldo de los horarios de todos los clientes y subdominios.</span>

**CARGAR RESPALDO DE HORARIOS**

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

- <span style="color: rgb(52, 73, 94);">Carga el respaldo de los horarios de todos los clientes y subdominios.</span>

**SUMAR UNA HORA A TODOS LOS CLIENTES**

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

- <span style="color: rgb(52, 73, 94);">Suma una hora a las apertura en los horarios de todos los clientes y subdominios en los domingos y posteriores de cambio horario.</span>

**RESTAR UNA HORA A TODOS LOS CLIENTES**

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

- <span style="color: rgb(52, 73, 94);">Resta una hora a las apertura en los horarios de todos los clientes y subdominios en los domingos y posteriores de cambio horario.</span>

**MODO TEST**

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

- <span style="color: rgb(52, 73, 94);">Modo test no hace ningún cambio en la base de datos ni en los canales corporativos.</span>
- <span style="color: rgb(52, 73, 94);">72 Horas después debe confirmar nueva ejecución. </span>
- <span style="color: rgb(52, 73, 94);">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.</span>

\----------------------------------------------------------------------------------------------------------------------------------------------

<p class="callout danger">Requisitos obligatorios:</p>

- Carpeta llamada "timeChange" dentro de "home - &gt; 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" &amp;&amp; "$1" != "test\_scheduled" \]\]; then  
>  echo "==============================" &gt; "$LOG\_FILE"  
>  echo "🕓 Inicio de ejecución — $DATE\_NOW" &gt;&gt; "$LOG\_FILE"  
>  echo "==============================" &gt;&gt; "$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" &gt;/dev/null 2&gt;&amp;1 &amp;  
>  done  
>  wait  
> }
> 
> finish\_log() {  
>  log "✅ Finalización completa — $(date '+%Y-%m-%d %H:%M:%S')"  
>  echo "------------------------------" &gt;&gt; "$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 &gt;&gt; /home/cvc/timeChange/timeChange.log 2&gt;&amp;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 &gt;&gt; /home/cvc/timeChange/timeChange.log 2&gt;&amp;1"  
>  echo "$RESTORE\_COMMAND" | at now + $REVERSE\_HOURS hours
> 
>  log "🏁 Proceso completo programado. Revisa log para seguimiento."  
>  finish\_log  
>  exit 0  
> fi