¿Cómo se mantiene el tiempo en la Raspberry Pi?

17

¿Cómo se mantiene el tiempo en una Raspberry Pi con la última versión de Raspbian? ¿Qué establece el reloj interno de un servidor NTP? ¿Qué sucede cuando no hay un servidor NTP disponible?

Desde mi programa, estoy tratando de determinar si el tiempo se ha establecido desde NTP y pedirle al usuario que lo configure si no es así.

Chico
fuente
44
Si time.now <que el año 2010, entonces el tiempo no está configurado. No necesitas saber nada más. El tiempo no se ahorra al apagarse y será 1970 según la especificación UNIX / POSIX. Para saber si el tiempo es incorrecto, debe consultar NTP y comparar la hora local. No puede determinar si la hora no está sincronizada sin consultar a un servidor horario.
Piotr Kula
44
si time.now <2010 no funcionará ya que el RPi establece la hora actual desde su última hora de apagado. Es por eso que quiero saber cómo se establece el tiempo para poder deshabilitar este comportamiento si es necesario.
Guy
calabaza: ¿cómo se relaciona esta pregunta con la deriva del reloj interno?
Guy
1
Quizás el título de esta pregunta debería ser más específico para evitar la superposición entre estas preguntas.
XTL

Respuestas:

22

Raspbian tiene dos soluciones de software para cronometraje. Dado que NTP requiere conexión de red y es bastante inútil si su Raspberry Pi no está conectada a la red, también usa faw-hwclock . Guarda el reloj actual periódicamente y lo carga al inicio.

pi@raspberrypi ~ $ cat /etc/fake-hwclock.data 
2012-08-15 03:17:01

Esto no es demasiado preciso, pero eliminará el problema del viaje en el tiempo hasta 1970 después de cada reinicio.

asalamon74
fuente
Buena conjetura Jivings! :-)
Piotr Kula
@ asalamon74: ¿puede agregar cómo deshabilitar fake-hwclock o necesitaría desinstalarlo?
Chico
2

Puede registrar estadísticas NTP y luego analizar registros de su programa.

La configuración del demonio NTP se almacena en el archivo /etc/ntp.conf. Descomente la línea con la directiva statsdirpara habilitar el registro de estadísticas NTP. Asegúrese de que el directorio al que se hace referencia exista y pueda escribirse para el usuario ntpd.

Dawid Ferenczy Rogožan
fuente
1

Para verificar si un servidor NTP ha establecido el tiempo, puede intentar usar ntpq -p obtendrá algo como esto *:

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*223.212.138.2    .MRS.           1 u  424  512  377    4.080   -4.551  21.857
+ts0.tttsc.nvm.e  .GPS.           1 u  387  512  363    1.304   -7.563  28.405
+218.89.10.3      217.13.17.82    2 u  334  512  377    1.853   -4.562  19.474

El 'alcance' será> 0 en alguna fila si se ha alcanzado el servidor NTP y, por lo tanto, establece la hora. Es 8 bits octal deslizándose a lo largo, es decir, 0,1,3,7,17,37,77,177,377

O esto: podría grep 'stratum' <16 o sync_ntp (obviamente, esto no está en RPi)

$ ntpq -c rl
associd=0 status=0615 leap_none, sync_ntp, 1 event, clock_sync,
version="ntpd [email protected] Mon Jul 18 09:22:49 UTC 2013 (1)",
processor="x86_64", system="Linux/2.6.32-431.29.2.el6.x86_64", leap=00,
stratum=4, precision=-21, rootdelay=40.242, rootdisp=315.102,
refid=192.168.1.123,
reftime=d82131cd.fbb96c5e  Thu, Nov 27 2014 13:14:53.983,
clock=d82138e6.fd03bdd1  Thu, Nov 27 2014 13:45:10.988, peer=61770, tc=9,
mintc=3, offset=5.214, frequency=52.475, sys_jitter=12.217,
clk_jitter=23.319, clk_wander=1.373
$

Alternativamente (creo que ntpstat no está disponible inmediatamente en RPi)

$ ntpstat
synchronised to NTP server (192.168.1.123) at stratum 4
   time correct to within 310 ms
   polling server every 512 s

y use los códigos de salida también explicados aquí http://www.cyberciti.biz/faq/linux-unix-bsd-is-ntp-client-working/ ciertamente no es específico de RPi ...

* Las direcciones del servidor horario no son reales

xcxc
fuente
-1

El cronometraje es todo en software. Sin usar NTP no hay cronometraje.

Si desea verificar si el reloj se ha configurado, simplemente use datepara ver si muestra la época de Unix, que es la configuración predeterminada de Pi.

Jivings
fuente
2
Incorrecto. El RPi establece la hora actual desde su última hora de apagado cuando no hay conexión de red. Entonces, el reloj siempre es un tiempo aleatorio anterior a la hora correcta, no necesariamente una época de Unix.
Chico
2
Eso ciertamente no es cierto en mi Pi. Si lo inicio sin una conexión de red, entonces es el momento. Puedo ver esto ahora mismo.
Jivings
2
Probablemente depende de la distribución.
Alex Chamberlain
1
@AlexChamberlain Parece una extraña discrepancia.
Jivings
1
@Jivings Si hay un software llamado Raspbian fake-hwclock, probablemente no estará en Arch. Suena como el tipo de pelusa que Arch ignora.
Alex Chamberlain