53 lines
1.9 KiB
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);
|
|
}
|