# Mesh Central | CVC: Control Remoto

# Renovar Certificado

Este apartado tiene como finalidad describir el procedimiento para la **actualización del Certificado DNS del servidor asociado a la plataforma Mesh Central**, utilizada para la monitorización y gestión remota de los equipos de los clientes.

Esta actualización es un proceso esencial para garantizar la **seguridad, integridad y disponibilidad** de las comunicaciones entre el servidor y los dispositivos gestionados, asegurando que dichas conexiones se establezcan mediante un certificado digital válido y actualizado. **De no actualizarse, no tendríamos acceso al control remoto**.

A continuación, se detallan de manera estructurada los pasos que deben seguirse para llevar a cabo correctamente la actualización del certificado.

**----------------------------------------------------------------------------------------------------------------------------------------------**

<p class="callout info">**1.- SERVIDOR EN PLESK: CONFIGURACIÓN**</p>

1. [Servidor PLESK](https://comunicacionvisualcanarias.com:8443/smb/web/view)
2. Websites &amp; Domains
3. comunicacionvisualcanarias.com
4. SSl/TLS
5. Reissue Certificate
6. Install a free bassic
7. Get it free
8. Copiar <span style="color: rgb(35, 111, 161);">RECORD</span>
9. <span style="color: rgb(186, 55, 42);">No tocar CONTINUE</span>
10. No cerramos la pestaña.

<p class="callout warning">**2.- SERVIDOR EN ARSYS**</p>

1. Pestaña Nueva
2. Web de [Arsys.es](https://www.arsys.es/clientes)
3. Área de cliente
4. <span style="color: rgb(132, 63, 161);">Usuario + Contraseña de Arsys</span>
5. Dominio -&gt; CVC -&gt; Panel de control -&gt; Entradas DNS
6. *"\_acme-challenge.comunicacionvisualcanarias.com*"
7. Modificar (Pegar<span style="color: rgb(132, 63, 161);"> </span><span style="color: rgb(230, 126, 35);"><span style="color: rgb(35, 111, 161);">RECORD</span> </span>en "Valor")

<p class="callout info">**3.- SERVIDOR EN PLESK: CONFIGURACIÓN**</p>

1. Pestaña Anterior
2. Pulsar CONTINUE
3. [Servidor PLESK](https://comunicacionvisualcanarias.com:8443/smb/web/view) -&gt; Websites &amp; Domains -&gt; CVC -&gt; Hosting &amp; DNS -&gt; Hosting -&gt; Hosting type -&gt; Prefered domain
4. Prefered domain -&gt; comunicacionvisualcanarias.com (sin www)

<p class="callout success">**4.- SERVIDOR EN PLESK: LLAVES**</p>

1. [Servidor PLESK](https://comunicacionvisualcanarias.com:8443/smb/web/view) -&gt; Websites &amp; Domains -&gt; CVC -&gt; SSl/TLS -&gt; Advanced Settings (Arriba)
2. Lets Encrypt Comunicaciónvisualcanarias.com (3ª opción)
3. <span style="color: rgb(186, 55, 42);">\[NO CONFUNDIR CON \*.comunicacionvisualcanarias.com\]</span>
4. Dejamos la pestaña abierta para poder copiar las llaves en el siguiente paso.

<p class="callout danger">**5.- TERMINAL DE WINDOWS**</p>

Abrir Terminal de Windows (Win+R -&gt; cmd -&gt; \[Enter\])

**Acceder al Servidor desde el Terminal**

> <span style="color: rgb(132, 63, 161);">ssh root@comunicacionvisualcanarias.com</span>

- Pegamos el comando indicado con *Clic Derecho* en el Terminal y pulsamos \[Enter\].

> <span style="color: rgb(132, 63, 161);">CVC650zor.</span>

- Pegamos el comando indicado con *Clic Derecho* en el Terminal y pulsamos \[Enter\].

**Private key (\*.key)**

> nano /opt/meshcentral/meshcentral-data/webserver-cert-private.key

1. Pegamos el comando indicado con *Clic Derecho* en el Terminal y pulsamos \[Enter\].
2. \[Copiar\] ***Private key (\*.key)*** de la pestaña de PLESK
3. Borrar contenido de **Private Key** en CMD (Ctrl+K)
4. Pegar texto con *Clic Derecho* -&gt; Ctrl+X -&gt; \[Y\] -&gt; \[Enter\].

**Certificate (\*.crt)**

<span style="color: rgb(186, 55, 42);">\[NO CONFUNDIR CON "*CA certificate (\*-ca.crt)*"\]</span>

> nano /opt/meshcentral/meshcentral-data/webserver-cert-public.crt

1. Pegamos el comando indicado con *Clic Derecho* en el Terminal y pulsamos \[Enter\].
2. \[Copiar\] ***Certificate (\*.crt)*** de la pestaña de PLESK
3. Borrar contenido de **Certificate** en CMD (Ctrl+K)
4. Pegar texto con *Clic Derecho* -&gt; Ctrl+X -&gt; \[Y\] -&gt; \[Enter\].

**Actualización del Sistema**

> systemctl restart meshcentral.service

- Pegamos el comando indicado con *Clic Derecho* en el Terminal y pulsamos \[Enter\].

# Atajos de teclado

**-. MODOS .-**

**Alt + 1:**  Modo Canal Corporativo + Hilo Musical

**Alt + 2:** Modo Tótem

**Alt + 3:** Modo Buscador Google

**Alt + 4:** Modo Guardias Farmacia

\----

**-. AJUSTES .-**

**Alt + K:** Escritorio

**Alt + C:** Opciones

**Alt + E:** Carpetas

\----

**-. OPCIONES .-**

**Cliente:** Elegir si es un equipo de CVC, SPAR, FRIGO MARTEL...

**Red:** Configurar la IP del equipo.

**Pantalla:** Configurar la resolución de la pantalla.

**Sonido:** Configurar la salida de audio (amplificador, pantalla...)

**Aplicación:** Elegir en que modo comienza el equipo.

# Comandos

En este apartado revisaremos los comandos compatibles con la aplicación.

Para ejecutar los comandos en un equipo, debemos acceder al terminal pulsando <span style="color: rgb(35, 111, 161);">***Alt+T***</span> o seleccionando en el control remoto CVC el apartado<span style="color: rgb(35, 111, 161);"> </span><span style="color: rgb(53, 152, 219);"><span style="color: rgb(35, 111, 161);">***Terminal***</span><span style="color: rgb(0, 0, 0);">.</span></span>

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-

***IP-Router | Obtener la dirección IP o Puerta de Enlace del equipo***

> <span style="color: rgb(35, 111, 161);">ip -c a</span>

Este comando nos entrega la dirección ip tras la denominación <span style="text-decoration: underline;">*inet*</span> en el apartado <span style="text-decoration: underline;">2. enp2s0</span>.

> <span style="color: rgb(35, 111, 161);">ip -c route</span>**<span style="color: rgb(35, 111, 161);">  
> </span>**

Este comando nos entrega la puerta de enlace tras la denominación <span style="text-decoration: underline;">*default via*</span>.

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

***Como comprobar las direcciones IP disponibles***

> <span style="color: rgb(35, 111, 161);">sudo apt install arp-scan</span>

Este comando nos instala arp-scan, un programa que nos permite escanear las ip de la conexión a la que esté conectada nuestro equipo.

> <span style="color: rgb(35, 111, 161);">ip link show</span>

Este comando nos entrega el nombre del terminal de red, como por ejemplo <span style="text-decoration: underline;">enp2s0</span> o <span style="text-decoration: underline;">enp3s0</span>. Sabremos cual es la correcta por que nos aparecerá <span style="text-decoration: underline;">UP</span> en codel state.

> <span style="color: rgb(35, 111, 161);">\#!/bin/bash</span>
> 
> <span style="color: rgb(35, 111, 161);">X=1</span>  
> <span style="color: rgb(35, 111, 161);">Rank\_Down=231</span>  
> <span style="color: rgb(35, 111, 161);">Rank\_Up=240</span>  
> <span style="color: rgb(35, 111, 161);">iface="enp1s0"</span>  
> <span style="color: rgb(35, 111, 161);">local\_ip=$(hostname -I | awk '{print $1}')</span>
> 
> <span style="color: rgb(35, 111, 161);">for ip in $(seq $Rank\_Down $Rank\_Up); do</span>  
> <span style="color: rgb(35, 111, 161);"> ipaddr="192.168.$X.$ip"</span>  
> <span style="color: rgb(35, 111, 161);"> if \[ "$ipaddr" != "$local\_ip" \]; then</span>  
> <span style="color: rgb(35, 111, 161);"> output=$(sudo arp-scan --interface=$iface $ipaddr | grep "$ipaddr")</span>  
> <span style="color: rgb(35, 111, 161);"> if \[ -z "$output" \]; then</span>  
> <span style="color: rgb(35, 111, 161);"> echo "$ipaddr está libre"</span>  
> <span style="color: rgb(35, 111, 161);"> fi</span>  
> <span style="color: rgb(35, 111, 161);"> fi</span>  
> <span style="color: rgb(35, 111, 161);">done</span>

Se nos mostrará en el terminal las direcciones IP disponibles dentro del rango especificado. Solo hay que revisar las variables dependiendo del establecimiento.

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

***AMIXER | Saber si el cable mini-jack está conectado al equipo***

> <span style="color: rgb(35, 111, 161);">amixer contents</span>**<span style="color: rgb(35, 111, 161);">  
> </span>**

Este comando nos información en la que podemos encontrar:

- <span style="color: rgb(132, 63, 161);">**Line Out Jack | Entrada jack de las torres** </span>
- <span style="color: rgb(132, 63, 161);">**Headphone Jack 1 | Entrada jack de los Aopen**</span>

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

***SYNC | Sincronizar contenidos***

> <span style="color: rgb(35, 111, 161);">sync</span>

Este comando permite sincronizar directamente los contenidos saltando los 2 minutos de espera para la sincronización automática.

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

***CONFIGURACIÓN: DATOS EQUIPO | ID, descargas activas, etc...***

> <span style="color: rgb(35, 111, 161);">cat system.cfg</span>

Este comando permite ver la configuración base del equipo.

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

***REGISTRO: DATOS EQUIPO | Contenidos y horario***

> <span style="color: rgb(35, 111, 161);">less /home/cvc/deploy/deploy.json</span>

Este comando permite ver los contenidos internos por ID y el horario que tiene registrado el equipo.

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

***REGISTRO: EMISIÓN | Que se vé y que se vió o escuchó***

> <span style="color: rgb(35, 111, 161);">less /home/cvc/logs/apps/canal.app.log</span>

Este comando permite ver a que hora se emitió cada contenido, música y evento organizado por fecha y hora.

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

***REGISTRO: EMISIÓN 5 CANCIONES | Cinco últimas canciones que se reprodujeron con fecha y hora.***

> <span style="color: rgb(35, 111, 161);">{ tac /home/cvc/logs/apps/canal.app.log 2&gt;/dev/null | grep "MUSIC;PLAY;" 2&gt;/dev/null | head -n 5; } 2&gt;/dev/null</span>

Este comando permite ver las cinco últimas canciones que se reprodujeron con fecha y hora.

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

***REGISTRO: EMISIÓN DE EVENTOS | Rango de una semana desde el día que se ejecuta el comando.***

> <span style="color: rgb(35, 111, 161);">grep -aE "$(for i in {0..6}; do date -d "$i days ago" '+%-d/%-m/%Y'; done | paste -sd '|' -)" /home/cvc/logs/apps/canal.app.log | grep -a "MEDIA\_EVENT"</span>

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

***REGISTRO: DESCARGAS | Cantidad de elementos descargados dentro del equipo***

> <span style="color: rgb(35, 111, 161);">cd /home/cvc/CARPETA/files | wc -l</span>

<span style="color: rgb(35, 111, 161);"><span style="color: rgb(0, 0, 0);">&gt;Nota: CARPETA se sustituye por ***<span style="color: rgb(132, 63, 161);">\_contenidos</span>*** o ***<span style="color: rgb(132, 63, 161);">\_musica</span>*** depeniendo de las necesidades.  
</span></span>

Este comando permite sincronizar directamente los contenidos saltando los 2 minutos de espera para la sincronización automática.

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

***XRANDR | Resolución de pantallas***

> <span style="color: rgb(35, 111, 161);">xrandr</span>

Este comando permite detectar si existe un extensor conectado y encendido. Permite cambiar la resolucion que se transmite a la pantalla.

Para asignar una resolución escribimos lo siguiente utilizando 1280x720px como ejemplo:

> <span style="color: rgb(35, 111, 161);">xrandr -s (1280x720)</span>

Para cambiar los HZ de la resolución escribimos lo siguiente utilizando 50HZ como ejemplo:

> <span style="color: rgb(35, 111, 161);">xrandr --rate (50)</span>

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

***PULSE AUDIO | Control de volumen***

> <span style="color: rgb(35, 111, 161);">alsamixer</span>

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

***MOSTRAR USB | Mostrar conexiones USB***

> <span style="color: rgb(35, 111, 161);">lsusb</span>

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

***RESOLV | Cambiar DNS***

> <span style="color: rgb(35, 111, 161);">sudo nano /etc/resolv.conf</span>

<span style="color: rgb(0, 0, 0);">ctrl+x para guardar y salir</span>

# Súper Comandos

Comandos aplicables únicamente en un Súper Ordenador.

# 💻 Súper Ordenador

El **Súper Ordenador** es un equipo central de la empresa diseñado para **realizar tareas automáticas y continuas**.  
Está **programado en entorno Linux**, lo que le otorga **estabilidad, seguridad y eficiencia** en la ejecución de procesos.

##### -------------------------------------------------------------------------------------------------

##### **⚙️ Funcionamiento continuo**

El Súper Ordenador <span style="text-decoration: underline;">**permanece encendido las 24 horas del día, los 7 días de la semana**</span>, sin interrupciones.  
Esto permite que todos los **procesos y servicios** de la empresa se mantengan **activos y disponibles** en todo momento.

Su **función principal** es **ejecutar tareas pre-programadas**, que se realizan automáticamente sin necesidad de intervención manual.

##### -------------------------------------------------------------------------------------------------

##### **🖥️ Equipos recomendados**

Un **buen ejemplo de ordenador para transformar en Súper Ordenador** son los <span style="text-decoration: underline;">**ordenadores de guardias**</span>, ya que suelen permanecer encendidos de forma continua y pueden aprovechar ese tiempo para ejecutar tareas automáticas en segundo plano.

##### -------------------------------------------------------------------------------------------------

##### **🌐 Acciones globales en todos los subdominios**

El Súper Ordenador puede **ejecutar scripts que actúan simultáneamente en todos los subdominios** de la empresa.  
Esto permite realizar acciones coordinadas como:

- ⏰ **Actualizar la hora** en todos los sistemas al mismo tiempo.
- 💾 **Hacer respaldos automáticos** del contenido de cada subdominio.
- 🎵 **Cambiar el canal del hilo musical** en todos los espacios conectados.

##### -------------------------------------------------------------------------------------------------

##### **💡 Ejemplo práctico**

Un uso común es **borrar la caché cada hora**, para asegurar que los contenidos del sistema se mantengan **actualizados y visibles** para todos los usuarios. De esta manera, el Súper Ordenador garantiza un funcionamiento fluido y sin acumulación de datos temporales.

##### ------------------------------------------------------------------------------------------------

##### **🧩 Cómo crear un Súper Ordenador**

Para **convertir un ordenador en un <span style="text-decoration: underline;">Súper Ordenador</span>**, es necesario:

1. 📂 **Añadir las carpetas** indicadas en las páginas correspondientes de este manual.
2. 📝 **Instalar los scripts** necesarios para la automatización de tareas.
3. 🔄 **Verificar la ejecución continua**, asegurando que el sistema pueda mantenerse encendido sin interrupciones.

Estos pasos permiten que el equipo adquiera todas las **capacidades de automatización y operación continua** propias de un Súper Ordenador.

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

# 🧩 Gestor de Contenidos

El script `actualizarLista.php` se centra en guardar, cargar y modificar la posición de los contenidos multimedia del los clientes. También puede borrar la caché para asegurar la visualización de los contenidos programados a futuro. Contiene diversos modos de función explicados más adelante con su específica url de ejecución.

Existen dos variantes:

- ***Panel*** `actualizarLista.php`:
- Ejecuta los modos en el resto de subdominios al mismo tiempo.
- --------------------------------------------------------------------------------------
- ***Spar / Frigo Martel / Pizza Royers / Cash Converters*** `actualizarLista.php`:
- Ejecuta los modos en su respectivo subdominio.

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

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

- **Spar Gran Canaria**
- **Frigo Martel**
- **Pizza Royers**
- **Cash Converters**

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

<p class="callout success">**Ejecución en Cualquier Equipo:**</p>

**MODO RESPALDO**

> <span style="text-decoration: underline;">**Respaldo General: Todos los Clientes** </span>**[https://panel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=backup](https://panel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=backup)**
> 
> <span style="text-decoration: underline;">**Respaldo: Spar Gran Canaria**</span>  
> [https://spar.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=backup](https://spar.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=backup)
> 
> <span style="text-decoration: underline;">**Respaldo: Frigo Martel**</span>  
> [https://frigomartel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=backup](https://frigomartel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=backup)
> 
> <span style="text-decoration: underline;">**Respaldo: Pizza Royers**</span>  
> [https://pizzaroyers.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=backup](https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=backup)
> 
> <span style="text-decoration: underline;">**Respaldo: Cash Converters**</span>  
> [https://cashconverters.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=backup](https://cashconverters.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=backup)

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

**MODO RESTAURACIÓN**

> <span style="text-decoration: underline;">**Restauración General: Todos los Clientes** </span>**[https://panel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=restore](https://panel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=restore)**
> 
> <span style="text-decoration: underline;">**Restauración: Spar Gran Canaria**</span>  
> [https://spar.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=restore](https://spar.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=restore)
> 
> <span style="text-decoration: underline;">**Restauración: Frigo Martel**</span>  
> [https://frigomartel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=restore](https://frigomartel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=restore)
> 
> <span style="text-decoration: underline;">**Restauración: Pizza Royers**</span>  
> [https://pizzaroyers.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=restore](https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=restore)
> 
> <span style="text-decoration: underline;">**Restauración: Cash Converters**</span>  
> [https://cashconverters.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=restore](https://cashconverters.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=restore)

- <span style="color: rgb(52, 73, 94);">Carga el respaldo disponible de los contenidos de todos los clientes en sus respectivos subdominios.</span>

**MODO PERMUTACIÓN**

> <span style="text-decoration: underline;">**Permutación General: Todos los Clientes** </span>**[https://panel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=permutation](https://panel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=permutation)**
> 
> <span style="text-decoration: underline;">**Permutación: Spar Gran Canaria**</span>  
> [https://spar.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=permutation](https://spar.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=permutation)
> 
> <span style="text-decoration: underline;">**Permutación: Frigo Martel**</span>  
> [https://frigomartel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=permutation](https://frigomartel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=permutation)
> 
> <span style="text-decoration: underline;">**Permutación: Pizza Royers**</span>  
> [https://pizzaroyers.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=permutation](https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=permutation)
> 
> <span style="text-decoration: underline;">**Permutación: Cash Converters**</span>  
> [https://cashconverters.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=permutation](https://cashconverters.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=permutation)

- <span style="color: rgb(52, 73, 94);">Mueve un espacio de los contenidos en la lista de reproducción en todos los clientes en sus respectivos subdominios.</span>

**MODO AJUSTE**

> <span style="text-decoration: underline;">**Ajuste General: Todos los Clientes** </span>**[https://panel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=adjust](https://panel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=adjust)**
> 
> <span style="text-decoration: underline;">**Ajuste: Spar Gran Canaria**</span>  
> [https://spar.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=adjust](https://spar.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=adjust)
> 
> <span style="text-decoration: underline;">**Ajuste: Frigo Martel**</span>  
> [https://frigomartel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=adjust](https://frigomartel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=adjust)
> 
> <span style="text-decoration: underline;">**Ajuste: Pizza Royers**</span>  
> [https://pizzaroyers.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=adjust](https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=adjust)
> 
> <span style="text-decoration: underline;">**Ajuste: Cash Converters**</span>  
> [https://cashconverters.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=adjust](https://cashconverters.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=adjust)

- <span style="color: rgb(52, 73, 94);">Retrocede un espacio de los contenidos en la lista de reproducción en todos los clientes en sus respectivos subdominios.</span>

**MODO ACTUALIZAR CACHÉ**

> <span style="text-decoration: underline;">**Actualizar Caché General: Todos los Clientes** </span>**[https://panel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=update](https://panel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=update)**
> 
> <span style="text-decoration: underline;">**Actualizar Caché: Spar Gran Canaria**</span>  
> [https://spar.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=update](https://spar.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=update)
> 
> <span style="text-decoration: underline;">**Actualizar Caché: Frigo Martel**</span>  
> [https://frigomartel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=update](https://frigomartel.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=update)
> 
> <span style="text-decoration: underline;">**Actualizar Caché: Pizza Royers**</span>  
> [https://pizzaroyers.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=update](https://pizzaroyers.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=update)
> 
> <span style="text-decoration: underline;">**Actualizar Caché: Cash Converters**</span>  
> [https://cashconverters.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=update](https://cashconverters.comunicacionvisualcanarias.com/_scripts/actualizarLista.php?action=update)  
>   
> <span style="text-decoration: underline;">**Actualizar Caché: Hilo Musical**</span>  
> [https://hilomusical.comunicacionvisualcanarias.com/\_scripts/borrarCache.php?action=all](https://hilomusical.comunicacionvisualcanarias.com/_scripts/borrarCache.php?action=all)

- <span style="color: rgb(52, 73, 94);">Borra la caché de todos los contenidos en todos los clientes en sus respectivos subdominios.</span>

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

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

- *<span style="text-decoration: underline;">Ejecución Manual:</span>* Tener un buscador actualizado (Firefox, Google Chrome, Microsoft Edge...)
- *<span style="text-decoration: underline;">Ejecución Automática:</span>* 1.- Carpeta llamada "EditList" dentro de "home - &gt; cvc" en un [Súper Ordenador](https://documentacion.comunicacionvisualcanarias.com/books/mesh-central-cvc-control-remoto/page/super-ordenador "💻 Súper Ordenador").
- *<span style="text-decoration: underline;">Ejecución Automática:</span>* 2.- Dentro de la carpeta, el script que se llamará "EditList" con formato .sh

> \#!/bin/bash
> 
> \# Script para ejecutar varias URLs de actualización de playlists simultáneamente  
> \# Log: /home/cvc/EditList/EditList.log
> 
> LOG\_FILE="/home/cvc/EditList/EditList.log"
> 
> \# Mostrar hora de inicio  
> echo "----------------------------------------" | tee -a "$LOG\_FILE"  
> echo "🕒 Ejecución iniciada: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOG\_FILE"
> 
> URLS=(  
>  "https://panel.comunicacionvisualcanarias.com/\_scripts/actualizarLista.php?action=update"  
> )
> 
> \# Función para ejecutar cada URL  
> procesar\_url() {  
>  local URL="$1"  
>  local HTTP\_CODE  
>  HTTP\_CODE=$(curl -s -o /dev/null -w "%{http\_code}" "$URL")
> 
>  if \[ "$HTTP\_CODE" -eq 200 \]; then  
>  echo "✅ URL procesada correctamente: $URL" | tee -a "$LOG\_FILE"  
>  else  
>  echo "❌ Error al procesar URL. Código HTTP: $HTTP\_CODE : $URL" | tee -a "$LOG\_FILE"  
>  fi  
> }
> 
> \# Ejecutar todas las URLs simultáneamente  
> for URL in "${URLS\[@\]}"; do  
>  procesar\_url "$URL" &amp;  
> done
> 
> \# Esperar a que todas terminen  
> wait
> 
> \# Mostrar hora de finalización  
> echo "✅ Ejecución finalizada: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOG\_FILE"  
> echo "" | tee -a "$LOG\_FILE"

# TextBox: Comandos



# TB: Actualizar Permisos

<p class="callout info">TextBox ADMIN/AGENTE | Actualizar Permisos</p>

> \# Ejecutar como ADMIN/AGENTE  
> \#Instantaneo  
>   
> cd /home  
> sudo chmod 777 cvc  
> sudo chmod +x cvc  
> sudo chmod 777 -R cvc  
> sudo chmod +x -R cvc