Cómo configurar un equipo con sistema operativo Linux CentOS 7 (válido para otras distribuciones como RedHat) para que la fecha y hora estén actualizadas y correctas de forma automática. Para ello usaremos NTP y los servidores de hora ROA (Real Instituto y Observatorio de la Armada). Indicamos  también cómo establecer la hora de la BIOS desde Linux y la zona horaria.

Requisitos para automatizar la actualización de la hora en Linux CentOS 7 con NTP

Necesitaremos un servidor o máquina virtual con sistema operativo Linux CentOS 7 (válido para otras distribuciones como RedHat y otras versiones de CentOS). Para instalar y habilitar el servicio NTP necesitaremos disponer de un usuario con privilegios suficientes en el sistema operativo.

El equipo deberá disponer de conexión a Internet. La actualización automática de la hora se realiza haciendo una consulta NTP a un servidor de hora de Internet (ROA).

Instalar y habilitar NTP en Linux CentOS 7

En primer lugar instalaremos los paquetes ntp y ntpdate usando el siguiente comando Linux:

Nos solicitará confirmación para instalar los paquetes, responderemos «y» e INTRO:

Instalar y habilitar NTP en Linux CentOS 7

Añadiremos los servidores de hora que queramos que utilice nuestro sistema editando el fichero de configuración de ntp, ubicado en /etc/ntp.conf, con cualquier editor (vi, nano, …):

Comentaremos la línea de los servidores que no queramos usar y añadiremos con la palabra server delante los que queramos usar, por ejemplo:

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

server hora.roa.es
server hora.rediris.es
server 0.centos.pool.ntp.org iburst

Instalar y habilitar NTP en Linux CentOS 7

Guardaremos los cambios en el fichero ntp.conf, en el caso de nano pulsando Control + O y cerrando con Control + X.

Si quisiéramos forzar la sincronización de los servidores de hora ntp sin reiniciar el servicio ejecutaremos el siguiente comando:

ntpdate -u -s hora.roa.es rediris.es hora.rediris.es 0.centos.pool.ntp.org

Nosotros hemos usado como servidores de hora principales hora.roa.es y hora.rediris.es, que son los oficiales de España. Se puede usar cualquier servidor de hora que se quiera, indicando su dirección como hemos mostrado anteriormente.

Una vez realizados los cambios procederemos a iniciar el servicio ntp y a habilitarlo para que se inicie automáticamente con el arranque del equipo. Para iniciarlo ejecutaremos el siguiente comando:

Para habilitarlo en el inicio ejecutaremos:

Habilitar puerto 123 y servicio ntp en cortafuegos Linux

Es posible que necesitemos permitir el acceso del servicio ntp a Internet, usando el puerto 123 (UDP). Para ello ejecutaremos los siguientes comandos:

Comprobar sincronización de NTP en Linux, estado de servicio

Una vez instalado y configurado el servicio NTP podremos comprobar si se está sincronizando correctamente ejecutando el siguiente comando:

Comprobar sincronización de NTP en Linux, estado de servicio

Que nos devolverá algo así si todo es correcto:

synchronised to NTP server (130.206.3.166) at stratum 2
time correct to within 80 ms
polling server every 64 s

Con el siguiente comando podremos consultar los servidores a los que se conecta NTP con algunos datos adicionales:

Comprobar sincronización de NTP en Linux, estado de servicio

Para comprobar el estado del servicio NTP (que debe estar ejecutándose):

Instalar y habilitar NTP en Linux CentOS 7

Que nos devolverá algo así si el servicio está ejecutándose correctamente:

[root@srvweb ~]# systemctl status ntpd
ntpd.service – Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since mar 2018-06-26 12:10:09 CEST; 12min ago
Main PID: 16540 (ntpd)
CGroup: /system.slice/ntpd.service
└─16540 /usr/sbin/ntpd -u ntp:ntp -g
jun 26 12:10:09 srvweb ntpd[16540]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
jun 26 12:10:09 srvweb ntpd[16540]: Listen and drop on 1 v6wildcard :: UDP 123
jun 26 12:10:09 srvweb ntpd[16540]: Listen normally on 2 lo 127.0.0.1 UDP 123
jun 26 12:10:09 srvweb ntpd[16540]: Listen normally on 3 ens192 192.168.1.4 UDP 123
jun 26 12:10:09 srvweb ntpd[16540]: Listen normally on 4 lo ::1 UDP 123
jun 26 12:10:09 srvweb ntpd[16540]: Listen normally on 5 ens192 f0::0c:ff:f3:d7 UDP 123
jun 26 12:10:09 srvweb ntpd[16540]: Listening on routing socket on fd #22 for interface updates
jun 26 12:10:09 srvweb ntpd[16540]: 0.0.0.0 c016 06 restart
jun 26 12:10:09 srvweb ntpd[16540]: 0.0.0.0 c012 02 freq_set kernel 3.819 PPM
jun 26 12:10:18 srvweb ntpd[16540]: 0.0.0.0 c615 05 clock_sync

Comprobar y establecer manualmente la hora y fecha en Linux CentOS

Para comprobar la hora y fecha actuales en Linux CentOS usaremos el comando:

Que nos devolverá algo así:

lun jun 18 19:06:12 CEST 2018

Si quisiéramos modificarla manualmente (sin usar lo explicado anteriormente) podremos ejecutar los siguientes comandos. Para cambiar el año, mes y día:

Donde 2018 será el año, 06 será el mes y 18 será el día que queramos establecer.

Para cambiar la hora, minuto y segundo:

Donde 19 será la hora, 10 el minuto y 22 el segundo que queramos establecer.

O bien, usando AM y PM:

Otra forma de establecer la hora:

Con el formato AAA-MM-DD.

Y la hora con:

Con el formato HH-MM-SS.

Comprobar y modificar la zona horaria de equipo Linux CentOS 7

Es conveniente revisar que tengamos correctamente establecida la zona horaria en nuestro equipo, podemos consultarla con el comando Linux:

que nos devolverá algo así:

[root@srvweb ~]# timedatectl
Local time: lun 2018-06-18 19:33:36 CEST
Universal time: lun 2018-06-18 17:33:36 UTC
RTC time: lun 2018-06-18 17:33:36
Time zone: Europe/Madrid (CEST, +0200)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
dom 2018-03-25 01:59:59 CET
dom 2018-03-25 03:00:00 CEST
Next DST change: DST ends (the clock jumps one hour backwards) at
dom 2018-10-28 02:59:59 CEST
dom 2018-10-28 02:00:00 CET

También podemos consultar la zona horaria listando el fichero /etc/localtime (que es donde se establece), con el siguiente comando:

que nos devolverá algo así:

[root@srvweb ~]# ls -l /etc/localtime
lrwxrwxrwx. 1 root root 33 jun 7 14:40 /etc/localtime -> /usr/share/zoneinfo/Europe/Madrid

Si la zona horaria fuese incorrecta podemos modificarla. Hay muchas formas de hacerlo, os indicamos algunas de ellas. La primera es de forma manual, haciendo una copia de seguridad previa del fichero /etc/localtime con el comando:

Y copiando el fichero correspondiente de nuestra zona horaria de /usr/share/zoneinfo a /etc/localtime, con el comando:

La segunda posibilidad es menos peligrosa, usando el comando timedatectl, de la siguiente forma:

Comprobar y establecer hora hardware del sistema (BIOS) desde Linux

Es conveniente comprobar que la hora hardware del sistema (la de la BIOS) esté correcta también. Para comprobar la hora actual ejecutaremos el siguiente comando:

Que nos devolverá algo así:

lun 18 jun 2018 19:26:23 CEST -0.207809 segundos

Si la hora y fecha son correctas lo dejaremos tal cual, pero si no lo son podremos ejecutar el siguiente comando para establecer la hora actual de Linux como la hora del sistema (BIOS):

O bien estableciéndola manualmente con el comando:

Comprobar log de sucesos de NTP para verificar correcta configuración

Para comprobar que el servicio NTP está funcionando correctamente en nuestro equipo y para asegurarnos de que conecta con los servidores de hora establecidos podemos consultar el fichero /var/log/messages. Se puede consultar con un editor como vi o nano o bien con el comando cat:

Los mensajes, si todo es correcto, debieran ser como los siguientes:

Jun 18 19:44:37 srvmail systemd: Starting Time & Date Service…
Jun 18 19:44:37 srvmail dbus[721]: [system] Successfully activated service ‘org.freedesktop.timedate1’
Jun 18 19:44:37 srvmail dbus-daemon: dbus[721]: [system] Successfully activated service ‘org.freedesktop.timedate1’
Jun 18 19:44:37 srvmail systemd: Started Time & Date Service.
Jun 18 19:51:49 srvmail chronyd[729]: chronyd exiting
Jun 18 19:51:49 srvmail systemd: Stopping NTP client/server…
Jun 18 19:51:49 srvmail systemd: Stopped NTP client/server.
Jun 18 19:51:49 srvmail systemd: Starting Network Time Service…
Jun 18 19:51:49 srvmail ntpd[24900]: ntpd 4.2.6p5@1.2349-o Fri Apr 13 12:52:27 UTC 2018 (1)
Jun 18 19:51:49 srvmail systemd: Started Network Time Service.
Jun 18 19:51:49 srvmail ntpd[24902]: proto: precision = 0.049 usec
Jun 18 19:51:49 srvmail ntpd[24902]: 0.0.0.0 c01d 0d kern kernel time sync enabled
Jun 18 19:51:49 srvmail ntpd[24902]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
Jun 18 19:51:49 srvmail ntpd[24902]: Listen and drop on 1 v6wildcard :: UDP 123
Jun 18 19:51:49 srvmail ntpd[24902]: Listen normally on 2 lo 127.0.0.1 UDP 123
Jun 18 19:51:49 srvmail ntpd[24902]: Listen normally on 3 ens192 192.168.1.7 UDP 123
Jun 18 19:51:49 srvmail ntpd[24902]: Listen normally on 4 lo ::1 UDP 123
Jun 18 19:51:49 srvmail ntpd[24902]: Listen normally on 5 ens192 fe80::20c:29ff:fee9:2f6c UDP 123
Jun 18 19:51:49 srvmail ntpd[24902]: Listening on routing socket on fd #22 for interface updates
Jun 18 19:51:49 srvmail ntpd[24902]: 0.0.0.0 c016 06 restart
Jun 18 19:51:49 srvmail ntpd[24902]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Jun 18 19:51:49 srvmail ntpd[24902]: 0.0.0.0 c011 01 freq_not_set
Jun 18 19:51:55 srvmail systemd: Reloading.
Jun 18 19:55:05 srvmail ntpd[24902]: 0.0.0.0 c614 04 freq_mode

Si por el contrario tenemos algún problema, por ejemplo si no se llega al servidor de hora indicado, nos mostrará algo así:

Jun 18 19:00:44 srvmail systemd: Started Network Time Service.
Jun 18 19:01:00 srvmail ntpd[24939]: Deferring DNS for horaa.roa.es 1
Jun 18 19:01:00 srvmail ntpd[24939]: 0.0.0.0 c016 06 restart
Jun 18 19:01:00 srvmail ntpd[24939]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Jun 18 19:01:00 srvmail ntpd[24939]: 0.0.0.0 c011 01 freq_not_set
Jun 18 19:01:01 srvmail systemd: Started Session 291 of user root.
Jun 18 19:01:01 srvmail systemd: Starting Session 291 of user root.
Jun 18 19:01:18 srvmail ntpd_intres[24942]: host name not found: horaa.roa.es

Anexo

  • Resultado de la instalación de los paquetes ntp y ntpdate:

[root@srvmail ~]# yum install ntp ntpdate
Complementos cargados:fastestmirror
base | 3.6 kB
extras | 3.4 kB
updates | 3.4 kB
(1/2): extras/7/x86_64/primary_db | 149 kB
(2/2): updates/7/x86_64/primary_db | 2.7 MB
Determining fastest mirrors
* base: mirror.gadix.com
* extras: mirror.gadix.com
* updates: mirror.gadix.com
Resolviendo dependencias
–> Ejecutando prueba de transacción
—> Paquete ntp.x86_64 0:4.2.6p5-28.el7.centos debe ser instalado
–> Procesando dependencias: libopts.so.25()(64bit) para el paquete: ntp-4.2.6p5-28.el7.centos.x86_64
—> Paquete ntpdate.x86_64 0:4.2.6p5-28.el7.centos debe ser instalado
–> Ejecutando prueba de transacción
—> Paquete autogen-libopts.x86_64 0:5.18-5.el7 debe ser instalado
–> Resolución de dependencias finalizada
Dependencias resueltas
Package Arquitectura Versión Repositorio
Instalando:
ntp x86_64 4.2.6p5-28.el7.centos base
ntpdate x86_64 4.2.6p5-28.el7.centos base
Instalando para las dependencias:
autogen-libopts x86_64 5.18-5.el7 base
Resumen de la transacción
Instalar 2 Paquetes (+1 Paquete dependiente)
Tamaño total de la descarga: 701 k
Tamaño instalado: 1.6 M
Is this ok [y/d/N]: y
Downloading packages:
(1/3): autogen-libopts-5.18-5.el7.x86_64.rpm | 66 kB 00:00
(2/3): ntpdate-4.2.6p5-28.el7.centos.x86_64.rpm | 86 kB 00:00
(3/3): ntp-4.2.6p5-28.el7.centos.x86_64.rpm | 549 kB 00:00
Total 1.4 MB/s | 701 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Instalando : autogen-libopts-5.18-5.el7.x86_64 1/3
Instalando : ntpdate-4.2.6p5-28.el7.centos.x86_64 2/3
Instalando : ntp-4.2.6p5-28.el7.centos.x86_64 3/3
Comprobando : ntpdate-4.2.6p5-28.el7.centos.x86_64 1/3
Comprobando : autogen-libopts-5.18-5.el7.x86_64 2/3
Comprobando : ntp-4.2.6p5-28.el7.centos.x86_64 3/3
Instalado:
ntp.x86_64 0:4.2.6p5-28.el7.centos ntpdate.x86_64 0:4.2.6p5-28.el7.centos
Dependencia(s) instalada(s):
autogen-libopts.x86_64 0:5.18-5.el7
¡Listo!

  • Resultado de la ejecución de los comandos systemctl start ntpd, systemctl enable ntpd y systemctl status ntpd

[root@srvmail ~]# systemctl start ntpd
[root@srvmail ~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@srvmail ~]# systemctl status ntpd
ntpd.service – Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since lun 2018-06-18 11:51:49 CEST; 13s ago
Main PID: 24902 (ntpd)
CGroup: /system.slice/ntpd.service
24902 /usr/sbin/ntpd -u ntp:ntp -g
jun 18 11:51:49 srvmail.local ntpd[24902]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
jun 18 11:51:49 srvmail.local ntpd[24902]: Listen and drop on 1 v6wildcard :: UDP 123
jun 18 11:51:49 srvmail.local ntpd[24902]: Listen normally on 2 lo 127.0.0.1 UDP 123
jun 18 11:51:49 srvmail.local ntpd[24902]: Listen normally on 3 ens192 192.168.1.7 UDP 123
jun 18 11:51:49 srvmail.local ntpd[24902]: Listen normally on 4 lo ::1 UDP 123
jun 18 11:51:49 srvmail.local ntpd[24902]: Listen normally on 5 ens192 fe80::20c:29ff:fee9:2f6c UDP 123
jun 18 11:51:49 srvmail.local ntpd[24902]: Listening on routing socket on fd #22 for interface updates
jun 18 11:51:49 srvmail.local ntpd[24902]: 0.0.0.0 c016 06 restart
jun 18 11:51:49 srvmail.local ntpd[24902]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
jun 18 11:51:49 srvmail.local ntpd[24902]: 0.0.0.0 c011 01 freq_not_set