2012-04-05 11 views
6

Necesito crear una aplicación que valide la sincronización de tiempo NTP en cada máquina. En otras palabras, necesito determinar si cada máquina es mi LAN está sincronizada con un servidor de tiempo común (estrato). Entonces, hasta ahora se me ocurrió dos maneras.cómo validar la sincronización de tiempo NTP

1) Hacer que el cliente NTP en cada máquina genera el archivo de estadísticas. Si tomo este enfoque, ¿cuál de los archivos de estadísticas debería examinar para determinar si el tiempo en la máquina está dentro de cierta tolerancia del servidor horario? Hay un peerstats, clockstats y loopstats. ¿Alguno de esos archivos contiene información que puedo usar para determinar si la hora está sincronizada?

2) Invocar el argumento de línea de comandos ntpq y canaliza su resultado. Analizar la salida.

En este momento prefiero la opción 1, pero, como he indicado, no estoy seguro de si alguno de los archivos de estadísticas NTP contienen información que puedo usar para determinar si el tiempo está sincronizado.

Hay un mejor enfoque.

¿Existe una API que puedo utilizar para consultar el cliente NTP directamente?

Gracias por su ayuda.

Respuesta

1

La mejor manera de verificar la sincronización es verificarla realmente, no mirar un archivo generado por el daemon cuyo trabajo está comprobando. Debe ejecutar ntpdate -q o su equivalente y verificar que la compensación reportada esté dentro de la tolerancia que requiera.

+0

Tenga en cuenta que en algunos sistemas (estoy usando Debian con un kernel 2.6 en un equipo integrado), debe especificar la ruta al binario, de lo contrario se obtiene un script de shell que lleva 'start | stop | restart | recargar | force-reload' en lugar de la opción '-q'. –

0

que tienen la misma pregunta. He estado usando una combinación de dos comandos: ntptime [y luego analizo la salida para confirmar que no haya ninguna ocurrencia de la palabra "ERROR"] ntpq -p [y luego confirmo que devuelve un estado sin errores, así como al menos un signo "+" para indicar un estado sincronizado]

Esto funciona muy bien en mis cajas de CentOS, pero en mis servidores FreeBSD, devolverá un estado "OK" incluso cuando haya pasado varias horas sin sincronizar, siempre y cuando la hora local es estable, ntpd se está ejecutando y los servidores fuente de tiempo están devolviendo un tiempo constante. Me gustaría recibir una mejor respuesta. La sugerencia de usar ntpdate podría funcionar, si puedo manipular algo para hacer que ntpdate use el ntp.conf para obtener una lista de servidores fuente de tiempo.

5

Usted podría funcionar ntpq -c "rv 0 stratum,offset" mando y analizar la salida. Si se devuelve stratum es < 16, entonces offset será la diferencia de tiempo entre el grupo ntp y el reloj del sistema en milisegundos.

También hay una biblioteca libntpq en desarrollo. Está en Betas temprano, pero si necesitas algo lo suficientemente mal, debería ser utilizable.

actualización 10/07/2016: Parece que libntpq proyecto es mucho tiempo desaparecido, pero una biblioteca con nombre idéntico se incluye con ntp fuente. Parece utilizable, pero lo más probable es que tenga que estar vinculado estáticamente. Uno debería ser capaz de tolerar GPL para usarlo de esta manera.

0

Creo que ambos arrojarán buenos resultados la única diferencia si realmente desea monitorear el tiempo cada pocos minutos y luego vaya con la segunda opción ... ntpq tiene varias opciones para monitorear todo su proceso de sincronización Ntp ... ntpq> pe le dará el estado de todos sus pares configurados, ntpq> como dará todos los detalles adicionales sobre cada uno de los pares y ntpq> rv dará la sinopsis completa sobre cada par ... Hay otros comandos internos para depurar su proceso ntp a través de ntpq.Vale la pena revisar la siguiente página si necesita más aclaraciones: http://doc.ntp.org/4.1.1/ntpq.htm

Para su primera opción, es un informe de estadísticas que puede dejar en su ntp para seguir generando y actualizando según lo mencionado en el archivo ntp.conf, es decir, si desea que se genere por día o por semana, etc ...

Loopstats le mostrará la fecha, hora, frecuencia & compensación de tiempo, la fluctuación, reloj, etc. constante de tiempo disciplina Peerstats le informará sobre todos sus compañeros donde presente y configurado clockstats informará sobre el estado del controlador de reloj

Además de estos, también están disponibles las opciones rawstats y sysstats. También puede verificar sus syslogs y redirigirlos a sus propios registros Ntp a través del archivo ntp.conf

, puede acceder a la sección de supervisión en el enlace mencionado anteriormente y puede aprender en más detalles sobre cómo configurar ntpstats

Espero que esto te ayude un poco !!

0

Si todo lo que necesita es determinar si la máquina está sincronizada o no, puede usar ntpstat.

SYNOPSIS 
    ntpstat 

DESCRIPTION 
    ntpstat will report the synchronisation state of the NTP daemon 
    running on the local machine. If the local system is found to be 
    synchronised to a reference time source, ntpstat will report the 
    approximate time accuracy. 

RETURNS 
    ntpstat returns 0 if clock is synchronised. 
    ntpstat returns 1 if clock is not synchronised. 
    ntpstat returns 2 if clock state is indeterminant, 
    for example if ntpd is not contactable. 
+0

Estaba tratando de usar eso en Ubuntu 16.04. Pero siempre informa 0, incluso después de más de 10 minutos después de desconectar el cable de red y de que la lista devuelta por 'ntpq -pn' estaba vacía. Todavía no investigué si es un error o si debería haber esperado aún más ... – Huygens

Cuestiones relacionadas