¿Por qué el reloj de Ubuntu se vuelve más lento o más rápido?

16

El reloj de Ubuntu está apagado por aproximadamente media hora:

Hora y fecha de Ubuntu v. La hora oficial de EE. UU.

¿Por dónde empiezo a solucionar esto?

Supuestamente se está configurando "automáticamente desde Internet". ¿Cómo puedo verificar que "Internet" sepa qué hora es?

Detalles

Ubuntu ha tenido tiempo de sobra para comunicarse con Internet:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

Este servidor de tiempo que encontré a través de una búsqueda web parece saber la hora correcta:

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

No hay errores reportados relacionados con NTP:

$ grep -ic ntp /var/log/syslog
0

Después de reiniciar, la hora se corrigió automáticamente y apareció lo siguiente en /var/log/syslog:

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

Un registro del desplazamiento informado por ntpdate revela que el reloj se desplaza aproximadamente 9 segundos cada hora:

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

Hora del reloj v. Desplazamiento del servidor de hora

ændrük
fuente
Antecedentes: ntp es una gran herramienta para mantener un tiempo preciso . Pero, toma un tiempo finito (varios minutos, o incluso horas) para llegar a la hora actual desde una hora incorrecta. Esto está relacionado con los servidores ntp (su elección) y su latencia de Internet a estos. @Floyd ha delineado un atajo para forzar rápidamente la hora correcta. Pero un mejor tiempo (y el uso de ntp ) requiere una cuidadosa selección de servidores ntp.
david6
Mi auto hace esto ... me vuelve loco ... Tengo que retroceder el tiempo 20 minutos cada semana ...
TheXed
Lo primero que intentaría hacer es cambiar la batería de la placa base ...
TheXed

Respuestas:

17

ntp hace bien en mantener su computadora configurada en el momento adecuado, y lo hace sin tener que ejecutarla al revés, lo que sería algo malo para algunos programas que podría estar ejecutando.

No solo establece el tiempo, sino que realiza ajustes continuos en la forma en que su computadora mantiene el tiempo para que su tiempo no solo sea correcto en un instante, sino que se mantenga cerca del tiempo real (en docenas de milisegundos, no docenas de minutos) . Ajusta tanto la fase (el tiempo) como la velocidad (qué tan rápido "marca" el reloj). ntp nunca hace que el reloj funcione al revés. Puede llevar mucho tiempo establecer qué tan rápido marcar el reloj después de un reinicio, por lo que ntp realiza un seguimiento de la deriva en un archivo llamado /var/lib/ntp/ntp.drift. Como no estás ejecutando ntp, nada de esto sucede.

ntp no es tan popular como lo era antes porque las computadoras portátiles y de escritorio en reposo, y las máquinas virtuales impiden que se ejecute parte del tiempo. Está diseñado para ejecutarse de vez en cuando en su propio horario en una computadora que funciona todo el tiempo y en el mundo real donde el tiempo es continuo. Probablemente por eso no está instalado por defecto en la estación de trabajo moderna. [Para Vmware, mira esto]

En su lugar, ntpdate se ejecuta cuando se abre la interfaz de red. Cuando se despierta una computadora portátil en reposo , restablece la conexión de red, se ejecuta ntpdate y la hora es nuevamente correcta. Si el reloj de hardware de la máquina es bastante preciso y la red se activa y desactiva con bastante frecuencia, eso generalmente es lo suficientemente bueno para la mayoría de las personas.

Por alguna razón, stock ntpdate no siempre se ejecuta. Use ntpdate-debian en su lugar en este caso. La sintaxis para for.mer es algo así como ntpdate ntp.ubuntu.com , para este último es ntpdate-debian

En ausencia de una de esas cosas, ntp es una mejor manera de mantener el tiempo.

Los sistemas están diseñados para tomar una interrupción del temporizador de vez en cuando y actualizar su idea del tiempo de cada interrupción. Mientras el temporizador de hardware esté funcionando según las especificaciones. el tiempo no se mueve demasiado. Si el temporizador de hardware no lo es, el tiempo se desplazará más (todos esos relojes se moverán a la deriva algunos, por la misma razón que su reloj de pulsera o reloj controlado por batería lo hará. Los relojes conectados a la pared se sincronizan con la hora por la frecuencia y la fase mantenida por tu compañía de energía).

La mayoría de los temporizadores de computadora están controlados por un circuito oscilador controlado por cristal en sus circuitos integrados. A pesar del cristal, corren más rápido y más lento dependiendo del ambiente, principalmente la temperatura. A menos que tenga un software de sincronización de tiempo instalado que desconocemos, diría que el reloj de su sistema no cumple las especificaciones.

Si tuviera que ejecutar ntp durante un día o dos, almacenaría información en /var/lib/ntp/ntp.drift que indicaría cuánto tendría que ajustar la velocidad a la que avanza el tiempo del sistema operativo por interrupción para haga coincidir su frecuencia de reloj de hardware con el tiempo real que pasa por Internet. Mantener el archivo igual y solo comenzar y detener ntp después de un minuto después de eso (suponiendo que mantenga el archivo /var/lib/ntp/ntp.drift sin cambios) podría hacer mucho para corregir esto si el sesgo del reloj ntp permanece después de ntp termina. No estoy seguro de este detalle.

Sospecho que el valor que ntp almacenaría en /var/lib/ntp/ntp.drift es muy diferente al mío.

Sin embargo, si esta máquina se mantiene en funcionamiento todo el tiempo, lo mejor que puede hacer es instalar ntp y dejar que haga lo suyo. Consulte las otras respuestas para obtener detalles sobre cómo obtener la hora correcta antes de comenzar. Corro NTP en mi escritorio y ntpdate en mi portátil.

Una alternativa posible interesante, adjtimex, se menciona en esta respuesta por nealmcb.

Si su sistema no se mantiene ejecutándose todo el tiempo, ejecutar ntpdate en el momento del arranque parece una buena opción.

Advertencia: algunos programas pueden enloquecer si el tiempo de las computadoras retrocede. Ejecutar ntpdate después del arranque podría hacer que esto ocurra.

Un problema, eso puede ser un problema: como recuerdo, ntp espera que el tiempo no esté demasiado lejos. Si es así, tratando de actuar de manera conservadora, ntp no ajustará el tiempo en absoluto. Si se encuentra en esta situación, tiene sentido hacer ambas cosas: ejecute ntpdate en el arranque para que el tiempo se inicialice en el momento correcto, y luego deje que el ntp se ejecute para mantenerlo en funcionamiento para proporcionar un cronometraje preciso. En particular, una batería defectuosa de la placa base puede causar este error, al igual que arrancar una computadora que ha estado apagada durante mucho tiempo.

John S Gruber
fuente
Gran explicación John! Solo una pequeña cosa: la fecha / hora en la mayoría de las placas base es mantenida por un RTC (reloj en tiempo real) separado, que usa su propio cristal de 32.768 KHz (porque dividir esa frecuencia por 2 ^ 15 le da exactamente un segundo), y el FSB El reloj, que generalmente está a más de 100 MHz, no tiene nada que ver con el mantenimiento de la fecha y la hora; si es así, el over / underclocking lo estropearía; en cambio, generalmente es una deriva de cristal en el módulo / circuito RTC. ¿Puedes buscar este problema y responder al comentario y / o editar tu respuesta para reflejar esto?
ish
¡Haré las dos cosas! Eliminé la mención de over-clock porque creo que es improbable, como dije. Sin embargo, el RTC solo se usa para establecer el tiempo en el momento del arranque. Como su comentario menciona, solo es preciso a 1 segundo. La man rtcpágina dice: "Los RTC no deben confundirse con el reloj del sistema, que es un reloj de software mantenido por el núcleo y utilizado para implementar gettimeofday (2) ..." No sé si el reloj del sistema está relacionado con el reloj FSB . Mirando la configuración del kernel, el último kernel i386 preciso de Ubuntu tiene el reloj del sistema actualizado a 250Hz. ¡Gracias por el comentario!
John S Gruber
@izx En mi sistema portátil, el kernel está usando el HPET como fuente de reloj. Es configurable Wikipedia dice que esto es parte de la función southbridge. No sé qué dice eso sobre su relación con el FSB, pero supongo que el FSB es parte del puente norte.
John S Gruber
Gracias John y @izx. Estoy encantado por la amplitud de esto. izx, espero que no lo tomes como algo personal porque lo marqué como aceptado. Creo que será la mejor lectura para futuros visitantes.
ændrük
@ ændrük: no hay problema en absoluto, como pueden ver, también aprecié mucho la minuciosidad de John.
ish
12

- Por lo general, el tiempo solo se sincroniza una vez cada vez que se inicia o se despierta del sueño

Entonces, el problema parece ser que el servidor de hora predeterminado de Ubuntu (¿qué es?) Tiene la hora incorrecta o que Ubuntu no está configurando la hora automáticamente desde Internet.

No, el servidor de hora de Ubuntu es correcto y está configurando la hora automáticamente.

El problema es que generalmente ocurre solo una vez después de cada arranque (o para ser más precisos, cada vez que se abre una interfaz de red , ya sea por apagado, suspensión o hibernación). Según su tiempo de actividad, es seguro decir que no se sincronizó en más de una semana. Y el reloj de su sistema funciona un poco rápido por alguna razón.

- Configure un crontrabajo por hora para sincronizar si no reinicia con frecuencia, o si su servidor / escritorio nunca se apaga

Su mejor opción es configurar un trabajo cron, yo diría que cada hora si desea un tiempo súper preciso. La forma más fácil de hacerlo es:

  • sudo editor /etc/cron.hourly/ntpsync

Agregue las siguientes líneas:

#! / bin / bash

ntpdate ntp.ubuntu.com #o su servidor elegido
  • guardar, salir y sudo chmod +x /etc/cron.hourly/ntpsync

Puede poner esto en su /etc/cron.dailylugar si lo desea, por una vez al día.

ish
fuente
Correcto. Estoy aceptando esto por responder correctamente a mi pregunta de por qué el reloj está mal, pero soy escéptico de esa solución. Tendré que aprender un poco más sobre esto antes de decidir qué acción tomar.
ændrük
Si configura el servidor de su elección en el archivo ntp.conf, ¿necesita redefinirlo aquí?
Snekse
6

Esto puede suceder si ha instalado el demonio de tiempo ntp y el tiempo en su máquina está demasiado lejos para corregirlo rápidamente.

Para arreglarlo, abra una terminal y haga

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

Qué hace esto:

  1. Detener el demonio ntp
  2. Establecer reloj
  3. El tiempo ahora debería ser el correcto
  4. reiniciar el demonio ntp

Si no tiene instalado ntp, hágalo con

  sudo apt-get install update

Actualización: el uso de ntpdate en un trabajo cron, como se ha recomendado aquí, genera problemas sutiles.

El ntpdate hará que el tiempo 'salte' cada hora más o menos. El uso de ntp evita este problema, ya que ajustará el tiempo sesgando el reloj. Además, aunque seleccionar un servidor ntp en el vecindario brinda una precisión aún mayor, no es necesario. El archivo de configuración ntp predeterminado tiene varios servidores y el servidor compensa automáticamente cualquier retraso.

En pocas palabras: - use ntp - si está lejos, apague ntp, ejecute ntpdate una vez y reinicie ntp.

Floyd
fuente
/etc/init.d/ntpno existe Esta es una instalación bastante reciente de Ubuntu 12.04 y no he cambiado deliberadamente nada relacionado con el tiempo.
ændrük
Entonces recomiendo instalarlo.
Floyd
En la medida de lo posible, prefiero no interferir con la configuración y los servicios de todo el sistema. Si este archivo no está instalado de manera predeterminada, ¿por qué debería ser necesario que funcionen las configuraciones predeterminadas de hora y fecha?
ændrük
1
¿Es la hora correcta después de un reinicio? Sospecho que la actualización del reloj solo ejecuta ntpdate una vez. Algunos sistemas tienen el problema de que el reloj del sistema mantenido por Linux se ejecuta demasiado rápido. He tenido eso en particular con los sistemas que se ejecutan como máquinas virtuales.
Floyd
1
Si este problema persiste después de reiniciar o apagar, podría ser que su celda CMOS se haya apagado en MOBO.
atenz
1

Tuve un problema similar y fue causado por algo en el firewall. Al final, agregué el trabajo cron por hora, pero agregué el -uargumento para ntpdateque use un puerto no estándar.

Mi problema fue causado por Ubuntu que en realidad no verificaba si ntpdatefuncionaba, sino que suponía automáticamente que funcionaría.

Axel
fuente