Sistema Contenedor Ibiza v2.0 - Despliegue Docker
This commit is contained in:
52
scripts/auto-rotation.php
Normal file
52
scripts/auto-rotation.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
use App\Services\RotationService;
|
||||
use App\Config\Env;
|
||||
use App\Config\Database;
|
||||
|
||||
// Configuración
|
||||
Env::load();
|
||||
date_default_timezone_set(Env::get('TIMEZONE', 'UTC'));
|
||||
|
||||
echo "[" . date('Y-m-d H:i:s') . "] Iniciando Worker de Rotación...\n";
|
||||
|
||||
// Bucle infinito
|
||||
while (true) {
|
||||
try {
|
||||
$now = new DateTime();
|
||||
|
||||
// Ejecutar cada sábado a las 23:00 (o la hora que prefieras)
|
||||
// Lógica: Si es Sábado (w=6) y hora 23
|
||||
if ($now->format('w') == 6 && $now->format('H') == 23) {
|
||||
|
||||
echo "[" . date('Y-m-d H:i:s') . "] Ejecutando generación semanal...\n";
|
||||
|
||||
// Verificar conexión a DB antes de procesar (reconexión si es necesario)
|
||||
// PDO suele manejar timeouts, pero en workers de larga duración es mejor verificar
|
||||
// App\Config\Database es Singleton, así que la instancia persiste.
|
||||
// Una estrategia simple es dejar que el script muera y Supervisor lo reinicie,
|
||||
// pero lo haremos robusto instanciando servicios frescos en el loop si fuera necesario.
|
||||
|
||||
$service = new RotationService();
|
||||
// Aseguramos que siempre haya al menos 8 semanas futuras.
|
||||
// Si ya existen, generateNext no duplica, solo agrega si faltan.
|
||||
$count = $service->generateNext(8);
|
||||
|
||||
echo "[" . date('Y-m-d H:i:s') . "] Generadas $count nuevas semanas.\n";
|
||||
|
||||
// Dormir 1h para asegurar que pase la hora 23 y no repita
|
||||
sleep(3600);
|
||||
} else {
|
||||
// Dormir 60 segundos antes de volver a verificar
|
||||
// echo "."; // Keepalive log
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo "[" . date('Y-m-d H:i:s') . "] ERROR CRÍTICO: " . $e->getMessage() . "\n";
|
||||
// Esperar un poco antes de reintentar para no saturar logs
|
||||
sleep(60);
|
||||
}
|
||||
|
||||
sleep(60);
|
||||
}
|
||||
Reference in New Issue
Block a user