Si tenemos la zona horaria configurada correctamente, no es habitual tener que cambiar la hora del sistema en una máquina GNU/Linux, si bien es posible que nos toque hacerlo en algún momento, por ejemplo si se ha agotado la pila de la placa, o, lo que es más común, si tenemos un sistema dual con windows y GNU/Linux ($microsoft tiene la insana costumbre de toquetear la hora de hardware en el arranque).
Si éste es nuestro caso, es bien sencillo solucionarlo, mediante el uso de un par de comandos.
No es el propósito de este hilo explicar el funcionamiento del protocolo NTP, aunque para una comprensión más profunda de lo que vamos a hacer, os recomiendo una lectura sosegada del artículo de la wikipedia que enlazo. Para que nos entendamos, lo que vamos a hacer es "pedirle" la hora a un servidor de tiempo NTP, grabarla en nuestro sistema, y volcarla después a nuestro reloj de hardware.
Como nota al margen, explicar que se definen dos relojes en un ordenador:
- Reloj de hardware, que mantiene la hora incluso con el equipo apagado.
- Reloj de software, que toma en el momento del arranque la hora del reloj de hardware (es el kernel, de hecho, el que lo hace), pero que se mantiene independiente para evitar leer a menudo la hora de hardware. Este reloj, el de software, con las correcciones necesarias referidas a nuestra zona horaria, es la que vemos en nuestro entorno de escritorio, y la que arroja el comando date:
$date
dom may 3 00:02:25 CEST 2015
Lo primero que vamos a hacer es irnos hasta el NTP Pool Project y tomar la hora de uno de sus servidores con el comando ntpdate. Yo, como estoy en España, he elegido uno de éstos.
# ntpdate 2.es.pool.ntp.org
3 May 00:03:17 ntpdate[1377]: adjust time server 147.83.123.133 offset 0.060122
sec
Podemos comprobar que nuestra hora de sistema (reloj de software) ha tomado ese valor:
$ date
dom may 3 00:03:33 CEST 2015
Previamente a la realización de este post me cambié la hora de hardware para que no coincidiesen; el reloj de hardware se puede ver con el comando hwclock sin argumentos (fijáos que hwclock, como previamente ntpdate requiere privilegios de root):
# hwclock
jue 02 mar 2006 03:50:27 CET -0.375877 segundos
Pues bien, usando el mismo comando podemos tomar la hora del sistema y grabarla en el reloj de hardware (igual que se puede hacer al contrario mediante la opción --hwtosys):
# hwclock --systohc
# hwclock
dom 03 may 2015 00:05:16 CEST -0.250574 segundos
Recomiendo la lectura de los man de los comandos ntpdate, date y hwclock, así como esta serie de ariculos, que, aunque antiguos, son muy enriquecedores. Además, puesto a buscar, he encontrado este otro artículo, que, aunque es sólo útil en Archlinux, expone cuatro conceptos muy bien explicados.
Enjoy!
Los siguientes comentarios son de la persona que los haya enviado. Este sitio no se hace responsable de las opiniones expresadas por los participantes en los foros y secciones de comentarios, y el hecho de publicar las mismas no significa que esté de acuerdo con ellas.
Me has sacado de un aprieto.