adjtime no ajusta la hora del sistema
![](https://seccdn.libravatar.org/avatar/d55592c220620b0b101b9a9ab1dd4e9c.jpg?s=120&d=mm&r=g)
Hola a todos! He estado leyendo un montón de mails antiguos en esta lista sobre ajuste de hora, pero veo que se centran (perdonad si me equivoco) en ajustar la hora del sistema operativo con el reloj hardware. Mi problema sólo tiene que ver con el reloj del sistema operativo. Tengo un programa en C que recibe la hora exacta desde un dispositivo gps (conectado al puerto serie) e intenta ajustar la hora-sistema según dicha hora-gps. Esto lo hace mediante la llamada a la función "adjtime". Bien, pues es casi mejor que no ponga esa llamada a "adjtime" porque lo único que hace es desajustar más la hora, cada vez el reloj del sistema se aleja más de la hora-gps a la que yo le digo que vaya. He probado a cambiar la llamada a "adjtime" por "settimeofday". Esta última hace el cambio pero más "bruscamente" y empieza a haber problemas con las fechas de creación de ciertos ficheros. Mi sistema operativo es Suse 9.0 y también lo he probado en Suse 9.1 (tampoco funciona). En cambio, he probado el mismo programa en RedHat 7.2 y 8.0 y ahí adjtime ajusta correctamente. Lo único diferente que he visto entre las máquinas Suse y las RedHat donde he hecho las pruebas es que en las Suse, cuando ejecuto "adjtimex --p" obtengo: TICK = 1000 FREQUENCY = 0 Y en las RedHat: TICK = 10000 FREQUENCY = 0 He intentado cambiar el tick de mis máquinas Suse a 10000 pero no me deja (me dice "invalid argument") Espero que alguien me pueda ayudar. De todas formas muchas gracias a todos por anticipado. Eva ______________________________________________ Renovamos el Correo Yahoo!: ¡100 MB GRATIS! Nuevos servicios, más seguridad http://correo.yahoo.es
![](https://seccdn.libravatar.org/avatar/861b5545c111d2257fa12e533e723110.jpg?s=120&d=mm&r=g)
El 2004-10-21 a las 13:06 +0200, Eva Dominguez escribió:
He estado leyendo un montón de mails antiguos en esta lista sobre ajuste de hora, pero veo que se centran (perdonad si me equivoco) en ajustar la hora del sistema operativo con el reloj hardware.
Y con la red.
Mi problema sólo tiene que ver con el reloj del sistema operativo. Tengo un programa en C que recibe la hora exacta desde un dispositivo gps (conectado al puerto serie) e intenta ajustar la hora-sistema según dicha hora-gps. Esto lo hace mediante la llamada a la función "adjtime". Bien, pues es casi mejor que no ponga esa llamada a "adjtime" porque lo único que hace es desajustar más la hora, cada vez el reloj del sistema se aleja más de la hora-gps a la que yo le digo que vaya.
Puede que sea un error de signo. Por cierto, el manual dice: This program gives you raw access to the kernel time variables. For a machine connected to the Internet, or equipped with a precision oscillator or radio clock, the best way to regulate the system clock is with ntpd(8). For a standalone or intermittently connected machine, you may use adjtimex instead to at least correct for sys tematic drift. Es decir, recomienda usar ntpd para eso.
He probado a cambiar la llamada a "adjtime" por "settimeofday". Esta última hace el cambio pero más "bruscamente" y empieza a haber problemas con las fechas de creación de ciertos ficheros. Mi sistema operativo es Suse 9.0 y también lo he probado en Suse 9.1 (tampoco funciona). En cambio, he probado el mismo programa en RedHat 7.2 y 8.0 y ahí adjtime ajusta correctamente. Lo único diferente que he visto entre las máquinas Suse y las RedHat donde he hecho las pruebas es que en las Suse, cuando ejecuto "adjtimex --p" obtengo: TICK = 1000 FREQUENCY = 0
Y en las RedHat: TICK = 10000 FREQUENCY = 0
A mi me da bastante más información: nimrodel:~ # adjtimex --print mode: 0 offset: 0 frequency: 0 maxerror: 16384000 esterror: 16384000 status: 64 time_constant: 2 precision: 1 tolerance: 33554432 tick: 10000 raw time: 1098370188s 62848us = 1098370188.062848 return value = 5 nimrodel:~ # which adjtimex --print /usr/sbin/adjtimex
He intentado cambiar el tick de mis máquinas Suse a 10000 pero no me deja (me dice "invalid argument")
Se supone que no lo puedes cambiar tanto... veamos el manual. -t val, --tick val Set the number of microseconds that should be added to the system time for each kernel tick interrupt. There are supposed to be 100 ticks per second, so val should be close to 10000. Increasing val by 1 speeds up the system clock by about 100 ppm, or 8.64 sec/day. tick must be in the range 9000...11000. Es decir, si lo tenemos en 10000 lo puedes poner a un poco más o a un poco menos. Tengo la sospecha que tu lo tienes a 1000 porque tienes el kernel arrancado como "desktop" o viceversa. A mi me funciona (suse 9.1): adjtimex: option `-t' is ambiguous For valid options, try 'adjtimex --help' nimrodel:~ # adjtimex --tick 10001 nimrodel:~ # adjtimex --print mode: 0 offset: 0 frequency: 0 maxerror: 16384000 esterror: 16384000 status: 64 time_constant: 2 precision: 1 tolerance: 33554432 tick: 10001 raw time: 1098370548s 442336us = 1098370548.442336 return value = 5 Ya ves que funciona. Si mi hipótesis es cierta, tu tendrías que poner valores en el rango 900..1100 Lo que no se es como se haría con ntpd. -- Saludos Carlos Robinson
participants (2)
-
Carlos E. R.
-
Eva Dominguez