timedatectl: comprobar la sincronización de la hora del servidor Linux y configurar la zona horaria
timedatectl es un comando de systemd que comprueba y cambia el reloj del sistema, la zona horaria y el estado de sincronización de la hora por NTP de un servidor Linux. Al comprobar el estado de sincronización en un servidor AlmaLinux 9 que usa chrony y en un servidor Debian 12 que usa ntpsec, los dos servidores tenían el reloj sincronizado, pero la línea NTP service mostró active en uno y n/a en el otro.
Las salidas siguientes son los resultados de ejecutar los comandos en los dos servidores. Solo se sustituyeron por valores de ejemplo los nombres de host, las direcciones IP y los números de versión de los paquetes, y los comandos que cambian la hora o la zona horaria no se ejecutaron en el servidor en producción.
1️⃣ Uso de timedatectl y comprobación de la hora del servidor Linux
Ejecutar timedatectl sin opciones da el mismo resultado que añadir status. La hora del reloj del sistema y del reloj de hardware (RTC), la zona horaria y el estado de sincronización aparecen juntos en una pantalla. Este es el resultado en el servidor Debian 12.
timedatectl Local time: Wed 2026-10-28 19:49:57 UTC
Universal time: Wed 2026-10-28 19:49:57 UTC
RTC time: Wed 2026-10-28 19:49:57
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: n/a
RTC in local TZ: noLa zona horaria del servidor Debian 12 es Etc/UTC, por eso Local time y Universal time mostraron la misma hora. Lo que indica cada línea y los resultados de los dos servidores están en la tabla siguiente.
| Línea de salida | Qué muestra | Resultados de los dos servidores y qué comprobar |
|---|---|---|
| Local time | Hora actual del reloj del sistema con la zona horaria aplicada | Al cambiar la zona horaria, solo esta línea y la salida de date pasan a la nueva zona |
| Universal time | La misma hora expresada en UTC | No cambia al cambiar la zona horaria; en el servidor Debian 12 (Etc/UTC) coincide con Local time |
| RTC time | Hora del reloj de hardware (RTC) | Aparece sin zona horaria; si RTC in local TZ es no, es la hora UTC |
| Time zone | Zona horaria configurada, su abreviatura y la diferencia con UTC | Para cambiarla, usa un nombre de la lista de list-timezones |
| System clock synchronized | Si el kernel considera que el reloj está sincronizado | yes en los dos servidores; si es no, comprueba primero el servidor de referencia con chronyc tracking o ntpq -p |
| NTP service | Si está en marcha el servicio de sincronización que timedatectl activa y desactiva | active en AlmaLinux 9 (chrony), n/a en Debian 12 (ntpsec); n/a significa que timedatectl no conoce el servicio, así que compruébalo con systemctl |
| RTC in local TZ | Si el reloj de hardware se mantiene en hora local (no = UTC) | no en los dos servidores; el comando para pasar de yes a UTC es set-local-rtc 0 |
Linux tiene dos relojes. El reloj del sistema es el que mantiene el kernel después del arranque, y el reloj de hardware es el reloj de la placa base que conserva la hora aunque el servidor esté apagado.
El reloj de hardware se lee directamente con hwclock. hwclock muestra la hora convertida a la zona horaria actual. En el servidor AlmaLinux, al leerlo con TZ=UTC delante del comando, el resultado fue una hora UTC terminada en +00:00.
TZ=UTC hwclock --show2026-10-28 19:53:33.006788+00:00En el servidor Debian 12, al que se accedió con una cuenta normal, el mismo comando terminó sin poder acceder al reloj de hardware.
/usr/sbin/hwclock --showhwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --verbose option to see the details of our search for an access method.La línea RTC in local TZ es el mismo ajuste que la tercera línea del archivo /etc/adjtime. En el servidor AlmaLinux la tercera línea era UTC, lo que significa que el reloj de hardware se mantiene en UTC.
cat /etc/adjtime0.0 0 0.0
0
UTCPara leer valores en un script, usa show en lugar de status. En el servidor Debian 12 muestra la misma información en forma nombre=valor, una por línea.
timedatectl showTimezone=Etc/UTC
LocalRTC=no
CanNTP=no
NTP=no
NTPSynchronized=yes
TimeUSec=Wed 2026-10-28 19:49:57 UTC
RTCTimeUSec=Wed 2026-10-28 19:49:57 UTCElige las propiedades con -p y añade --value para dejar solo los valores, sin los nombres. Usa esta forma para sacar solo el nombre de la zona horaria.
timedatectl show -p Timezone --valueEtc/UTC🔲 Simulador del comando timedatectl
En el simulador siguiente puedes escribir tú mismo los comandos para ver la hora, listar las zonas horarias, cambiar la zona horaria y comprobar la sincronización con chronyc.
2️⃣ Estado de sincronización de la hora del servidor Linux
La línea System clock synchronized indica si el kernel considera que el reloj está sincronizado, y la línea NTP service indica si está en marcha el servicio de sincronización que timedatectl puede activar y desactivar. Con show, los mismos valores aparecen como NTPSynchronized y NTP, y CanNTP indica si hay un servicio de sincronización que se pueda activar y desactivar.
En el servidor AlmaLinux 9 con chrony, los tres valores eran yes.
timedatectl show -p CanNTP -p NTP -p NTPSynchronizedCanNTP=yes
NTP=yes
NTPSynchronized=yesEn el servidor Debian 12, que ajusta la hora con ntpsec, solo NTPSynchronized era yes, y CanNTP y NTP eran no. Por eso la línea NTP service salió como n/a en la pantalla status de este servidor.
timedatectl show -p CanNTP -p NTP -p NTPSynchronizedCanNTP=no
NTP=no
NTPSynchronized=yesEl servicio ntpsec en sí estaba en marcha.
systemctl is-active ntpsecactiveLos únicos servicios de sincronización que conoce timedatectl son los escritos en los archivos de lista de la carpeta ntp-units.d, y los paquetes de la distribución colocan estos archivos en /usr/lib/systemd/ntp-units.d/ (según el manual oficial). El servidor AlmaLinux 9 tenía un archivo de lista instalado por el paquete chrony, con una sola línea: chronyd.service.
cat /usr/lib/systemd/ntp-units.d/50-chronyd.listchronyd.servicerpm -qf /usr/lib/systemd/ntp-units.d/50-chronyd.listchrony-4.8-10.el9.x86_64El servidor Debian 12 no tenía esta carpeta. Como ntpsec no está en la lista, timedatectl sabía que el reloj estaba sincronizado, pero no podía activar ni desactivar ese servicio.
ls /usr/lib/systemd/ntp-units.d/ls: cannot access '/usr/lib/systemd/ntp-units.d/': No such file or directory3️⃣ Comprobar la sincronización de la hora con chronyc
En un servidor con chrony, el servidor de hora que sigue el reloj se comprueba con chronyc. sources muestra los servidores de hora que consulta chronyd y su estado, uno por línea.
chronyc sourcesMS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- 192.0.2.10 2 10 377 943 +272us[ +275us] +/- 55ms
^- ntp1.example.com 2 10 377 80 -28us[ -32us] +/- 3655us
^- 198.51.100.33 3 10 257 384 -151us[ -156us] +/- 97ms
^- 198.51.100.82 3 10 177 532 +157us[ +149us] +/- 45ms
^* 192.0.2.123 3 4 377 2 -21us[ -23us] +/- 312usEl ^ inicial indica un servidor de hora, el * como segundo carácter indica el servidor de referencia que sigue el reloj ahora, y - indica un candidato que no entra en el cálculo. Poll 4 en el servidor de referencia significa que se consulta cada 16 segundos (2 elevado a 4), y Reach 377 indica que se recibieron las ocho últimas respuestas.
tracking muestra cuánto se desvía el reloj del sistema de la hora del servidor de referencia.
chronyc trackingReference ID : C000027B (192.0.2.123)
Stratum : 4
Ref time (UTC) : Wed Oct 28 19:50:21 2026
System time : 0.000002422 seconds slow of NTP time
Last offset : -0.000002098 seconds
RMS offset : 0.000000981 seconds
Frequency : 6.348 ppm slow
Residual freq : -0.001 ppm
Skew : 0.017 ppm
Root delay : 0.000300815 seconds
Root dispersion : 0.000150780 seconds
Update interval : 16.3 seconds
Leap status : NormalLa línea System time muestra que el reloj del sistema iba 0.000002422 segundos por detrás de la hora NTP, y Leap status era Normal. Un Update interval de 16.3 segundos es el intervalo entre las dos últimas actualizaciones del reloj.
A qué servidores se consulta lo fijan las líneas pool y server de /etc/chrony.conf. Si se dejan solo las líneas de ajuste, sin comentarios ni líneas vacías, queda así.
grep -v "^#" /etc/chrony.conf | grep -v "^$"pool 2.almalinux.pool.ntp.org iburst
sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony
server 192.0.2.123 prefer iburst minpoll 4 maxpoll 4La línea pool consulta el pool NTP de AlmaLinux, y prefer en la última línea server es una opción que hace que chronyd elija este servidor antes que los demás. makestep 1.0 3 es un ajuste que, en las tres primeras actualizaciones tras arrancar chronyd, corrige de golpe un reloj desviado más de 1 segundo, y después lo ajusta poco a poco haciéndolo ir algo más rápido o más lento. rtcsync hace que el kernel copie la hora del sistema al reloj de hardware cada 11 minutos (según la documentación oficial).
En el servidor Debian 12 con ntpsec, la misma información se comprobó con ntpq -p. El * inicial es el servidor de referencia, y los tres servidores se consultaban cada 1024 segundos.
ntpq -p remote refid st t when poll reach delay offset jitter
===============================================================================
+203.0.113.43 198.51.100.28 2 u 835 1024 377 184.6893 -0.1018 1.4879
+203.0.113.44 198.51.100.27 2 u 547 1024 377 183.0827 -2.4227 4.0957
*ntp2.example.co 198.51.100.40 2 u 440 1024 377 177.4670 -0.5814 1.70704️⃣ Cambiar la zona horaria con timedatectl
Los nombres de zona horaria se consultan con list-timezones. La mayoría tienen la forma Continente/Ciudad, uno por línea, y los dos servidores tenían 598.
timedatectl list-timezones | head -5Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmaratimedatectl list-timezones | wc -l598La lista es larga, así que fíltrala con grep para buscar un nombre.
timedatectl list-timezones | grep -i new_yorkAmerica/New_YorkLa zona horaria se cambia escribiendo un nombre de la lista después de set-timezone. Este comando cambia el enlace /etc/localtime por el nuevo archivo de zona horaria, así que desde una cuenta normal se ejecuta con sudo.
sudo timedatectl set-timezone America/New_YorkComprueba con ls -l si /etc/localtime es un enlace a un archivo de zona horaria.
ls -l /etc/localtimelrwxrwxrwx 1 root root 27 Sep 24 12:52 /etc/localtime -> /usr/share/zoneinfo/Etc/UTCUn nombre que no está en la lista se rechazó al instante, antes de cambiar la zona horaria.
timedatectl set-timezone Mars/OlympusFailed to set time zone: Invalid or not installed time zone 'Mars/Olympus'Cambiar la zona horaria no cambia la hora del reloj del sistema; solo Local time y la salida del comando date aparecen en la nueva zona. En un servidor con el reloj de hardware en UTC, el reloj de hardware tampoco cambia (según el manual oficial).
5️⃣ Activar NTP y fijar la hora manualmente con timedatectl
set-ntp true inicia el primer servicio de la lista de servicios de sincronización y lo habilita en el arranque. false detiene los servicios de la lista y los deshabilita en el arranque (según el manual oficial).
sudo timedatectl set-ntp trueEn el servidor Debian 12, sin archivo de lista, el comando terminó con NTP not supported incluso con false, el valor actual. Un servicio que no está en la lista, como ntpsec, se inicia y se detiene directamente con systemctl.
timedatectl set-ntp falseFailed to set ntp: NTP not supportedPara fijar la hora a mano, escribe la fecha y la hora después de set-time. Este comando ajusta el reloj de hardware junto con el reloj del sistema.
sudo timedatectl set-time '2026-10-28 20:00:00'En el servidor Debian 12, introducir un valor con un formato incorrecto terminó con un error sin cambiar la hora.
timedatectl set-time badFailed to parse time specification 'bad': Invalid argumentEn un servidor con chrony, para corregir de una vez un reloj muy desviado se usa chronyc makestep.
sudo chronyc makestepmakestep descarta la diferencia restante que se iba corrigiendo poco a poco y hace que el reloj del sistema salte esa cantidad de inmediato. La documentación oficial advierte que un cambio brusco de hora puede afectar a algunos programas, así que úsalo solo cuando el reloj esté tan desviado que no se pueda corregir despacio.
🔢 FAQ & contenido recomendado
Configuración · locale
[Linux] Comando localectl
El comando localectl comprueba y cambia el idioma del sistema (locale) y la distribución del teclado.
Información del sistema
Comando uptime de Linux (tiempo de actividad del servidor & carga media de 1, 5 y 15 minutos)
El comando uptime comprueba cuánto tiempo lleva encendido el servidor y la carga media de 1, 5 y 15 minutos.
Gestión de servicios
Iniciar, detener y reiniciar Apache: comandos y la diferencia con graceful
Comandos para iniciar, detener y reiniciar Apache y comprobar el estado del servicio en sistemas de la familia Red Hat y en Ubuntu.
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.