El servidor amaneció con la hora corrida. No fue un fallo de hardware ni un bug de aplicación: fue un desfase en la base de datos de zonas horarias del sistema operativo. Acá va cómo lo diagnosticé y resolví.
El Problema
En México se canceló el horario de verano por ley, pero el servidor seguía mostrando una hora adelantada. Al revisar timedatectl, el reloj local estaba una hora por delante del tiempo real.
Mi primera hipótesis fue un problema de sincronización NTP o una configuración de zona horaria incorrecta. Revisé el servicio, la zona declarada y el sincronismo con el pool de NTP. Todo estaba bien informado, pero la hora seguía corriendo.
Diagnóstico
La causa raíz estaba más abajo: el paquete tzdata estaba desactualizado. Esta base de datos interna de zonas horarias del sistema operativo mantenía la regla antigua de horario de verano. Mientras el resto del SO funcionaba normal, tzdata seguía aplicando las reglas vieja.
Un detalle chico con un impacto grande: logs con timestamps erróneos, jobs de cron desfasados y servicios que dependen de la hora del sistema desalineados.
La Solución
No hubo que tocar aplicaciones ni configuración adicional. La solución fue actualizar exclusivamente el paquete tzdata para alinear las reglas políticas y geográficas de tiempo dentro del sistema operativo:
sudo apt update
sudo apt install --only-upgrade tzdata
Flujo mínimo, sin actualizaciones generales, sin reinicios riesgosos, sin cambios de configuración extra.
Lecciones Aprendidas
Parece mantenimiento menor, pero tzdata impacta directamente en:
- Logs de Nginx, MySQL o systemd: dependen de timestamps exactos para rastrear eventos y errores.
- Tareas programadas: un desfase de una hora puede disparar backups o notificaciones en ventanas incorrectas.
- Criptografía y autenticación: protocolos como OAuth, JWT y firmas API validan la marca de tiempo del servidor; un desfase puede volver tokens inválidos sin razón aparente.
En servidores de producción, mantener esta base al día es parte del mantenimiento básico, no algo opcional.
Cierre
Esta experiencia me recordó que en servidores de producción cada paquete importa. Un tzdata desactualizado no hace ruido hasta que empieza a romper logging, sesiones o jobs programados.
Agregá la actualización selectiva de tzdata a tu pipeline de mantenimiento periódico. No esperes a que un desfase horario se convierta en una sesión de debugging costosa.