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

16

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

¿Dónde empiezo a solucionar este problema?

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

Detalles

Ubuntu ha tenido mucho tiempo 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 ningún error informado relacionado 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 de la compensación reportada por ntpdate revela que el reloj está a la deriva 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))
'

    
pregunta ændrük 18.05.2012 - 12:59

4 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 cual sería algo malo para algunos programas que podría estar ejecutando.

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

ntp no es tan popular como lo era antes porque las laptops y equipos de escritorio para dormir y las máquinas virtuales impiden que se ejecute alguna parte del tiempo. Está diseñado para ejecutarse de vez en cuando en su propio horario en una computadora que se ejecuta todo el tiempo, y en el mundo real donde el tiempo es continuo. Esa es probablemente la razón por la cual no está instalado por defecto en la estación de trabajo moderna. [Para Vmware, consulte esto]

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

Por algún motivo, stock ntpdate no siempre se ejecuta. Utilice ntpdate-debian en este caso. La sintaxis para el 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 de temporizador cada cierto tiempo y actualizar su idea del tiempo de cada interrupción. Siempre que el temporizador de hardware esté funcionando según las especificaciones. el tiempo no deriva demasiado. Si el temporizador de hardware no lo es, el tiempo se desplazará más (todos los relojes se moverán un poco, por la misma razón que su reloj de pulsera o reloj controlado por batería. Los relojes conectados a la pared se sincronizan con la frecuencia y la fase que mantiene su compañía eléctrica).

La mayoría de los temporizadores de la 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 según el entorno, principalmente la temperatura. A menos que tenga algún software de sincronización de tiempo instalado que no sepamos, diría que el reloj de su sistema está fuera de especificaciones.

Si ejecutara ntp por 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 el tiempo de su sistema operativo avanza por interrupción para que coincida con la velocidad de reloj de su hardware con el tiempo real que obtiene a través de Internet. Mantener el archivo igual y simplemente iniciar 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 parásito del reloj ntp establece permanece después de que termina ntp . No estoy seguro de este detalle.

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

Si esta máquina se mantiene funcionando todo el tiempo, sin embargo, lo mejor que puede hacer es instalar ntp y dejar que haga su trabajo. Vea las otras respuestas para obtener detalles sobre cómo obtener el tiempo correcto antes de comenzar. Ejecuto ntp en mi escritorio y ntpdate en mi computadora portátil.

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

Si su sistema no se ejecuta 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 va hacia atrás. Ejecutar ntpdate después del arranque podría causar que esto ocurra.

Uno tiene que ver, eso puede ser un problema: como recuerdo ntp espera que el tiempo no esté demasiado lejos. Si es así, tratando de actuar de forma conservadora, ntp no ajustará el tiempo en absoluto. Si se encuentra en esta situación, tiene sentido hacer ambas cosas: ejecutar ntpdate al arrancar para obtener el tiempo inicializado en el momento adecuado y luego dejar que el ntp se ejecute para mantener se ejecuta para proporcionar la hora exacta. En particular, una mala batería de la placa base puede causar este error, al igual que el arranque de una computadora que ha estado apagada durante mucho tiempo.

    
respondido por el John S Gruber 08.06.2012 - 21:24
12

: por lo general, el tiempo solo se sincroniza una vez con cada inicio o activación desde el sueño

  

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

No, el servidor de hora de Ubuntu es correcto y establece automáticamente la hora a partir de él.

El problema es que generalmente se produce una sola vez en cada arranque (o para ser más precisos, cada vez que se abre una interfaz de red , ya sea desde el apagado o el apagado 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 del sistema se ejecuta un poco rápido por alguna razón.

: configure un trabajo por hora cron para sincronizar si no se reinicia con frecuencia, o su servidor / escritorio nunca se queda dormido

Tu mejor opción es configurar un cron-job, diría cada hora si quieres 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 #or your choice of server
  • guardar, salir y sudo chmod +x /etc/cron.hourly/ntpsync

Puedes poner esto en /etc/cron.daily si lo deseas, por una vez al día.

    
respondido por el ish 18.05.2012 - 14:16
6

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

Para arreglarlo, abre una terminal y haz

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

Qué hace esto:

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

Si no tiene instalado ntp, hágalo con

  sudo apt-get install update

Actualización: Usar ntpdate en un trabajo cron, como se ha recomendado aquí, conduce a 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 al sesgar el reloj. Además, si bien la selección de 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 los retrasos.

En resumen:  - usa ntp  - si está lejos de, apague ntp, ejecute ntpdate una vez y reinicie ntp.

    
respondido por el Floyd 18.05.2012 - 13:07
1

Tuve un problema similar y fue causado por algo en el firewall. Al final, agregué el trabajo cron por hora, pero agregué el argumento -u a ntpdate para que utilizara un puerto no estándar.

Mi problema fue causado por Ubuntu, que no comprobó realmente si ntpdate funcionó, sino que asumió automáticamente que funcionaría.

    
respondido por el Axel 13.09.2012 - 23:06

Lea otras preguntas en las etiquetas