Files
contenedor_ibiza/scripts/auto-rotation.php

53 lines
1.9 KiB
PHP

<?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);
}