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