Anterior Siguiente Indice

2. Uso del programa clock

Todo lo que necesita saber está en la página man de clock(8), y este mini-COMO lo guiará a través del proceso.

Nota:

Debe ser root para ejecutar "clock", o cualquier otro programa que afecte la hora del sistema o el reloj del CMOS.

2.1 Revisión de su sistema

Revise sus archivos de inicio del sistema buscando una línea de comando semejante a "clock -a" o "clock -ua". Dependiendo de la distribución que esté utilizando, puede estar en /etc/rc.local o en /etc/rc.d/rc.sysinit, /etc/rc.d/init.d o algún otro lugar similar.

Si aparece como "clock -s" o "clock -us", cambie la "s" por una "a", y compruebe si tiene el archivo /etc/adjtime, que contiene una sola línea semejante a esta:

0.000000 842214901 0.000000

Estos números son el factor de corrección (en segundos por día), el momento que reloj fue corregido por última vez (en segundos desde Enero 1, 1970), y el momento (segundo) en que fue corregido por última vez. Si no dispone de este archivo, entre en el sistema como root y créelo, con una única línea que como esta (todo en cero):

0.0 0 0.0

Ejecute "clock -a" o "clock -ua" manualmente desde la línea de comando para actualizar el segundo número (use la "u" si su reloj esta marcando la hora Universal en lugar el tiempo local).

2.2 Cálculo de las variaciones de su reloj

Primero, necesita saber qué hora es :-). Su hora del día puede estar o no ajustada. Mi método favorito es llamar al servicio WWV al (303) 499-7111 (es una llamada por voz). Si dispone de acceso a un servidor de horario en la red, puede utilizar el programa ntpdate del paquete xntpd (utilice el parámetro -b para permitir que el kernel actualice el reloj del CMOS). De lo contrario use date -s hh:mm:ss para poner en hora el reloj del kernel a mano, y entonces clock -w para el reloj del CMOS, tomando la hora del reloj del kernel. Deberá recordar cuándo puso en hora el reloj por última vez, lo mejor es escribir la fecha en algún lugar donde no la pierda. Si utilizó ntpdate, con date +%s" puede registrar el número de segundos desde Enero 1, 1970.

Entonces, vuelva algunos días o semanas después para ver cuánto se ha desviado su reloj. Si puso la hora a mano, le recomiendo espere al menos dos semanas para poder calcular la desviación lo más aproximada a .1 seg/día. Después de algunos meses le será posible determinarla con exactitud cercana a .01 seg/día (algunas personas prefieren más exactitud aún, pero yo ya soy conservador a estas alturas). Si ha utilizado ntpdate no es necesario que espere tanto tiempo, pero siempre podrá hacer un mejor ajuste cuanto más tiempo pase.

Puede ejecutar con cron el comando "clock -a" a intervalos regulares para mantener la hora del sistema ajustada con el horario (corregido) de la CMOS. Este comando puede ejecutarse también desde algún archivo de inicio en el momento del arranque, si Vd hace esto (como lo hacemos casi todos nosotros) será suficiente para sus propósitos.

Tenga en cuenta que algunos programas pueden quejarse si el sistema salta más de un segundo a la vez, o si va para atrás. Si tiene este problema, puede utilizar xntpd o ntpdate para corregir el tiempo más gradualmente.

2.3 Ejemplo

Estableciendo la hora

Entre como root. Llame al (303) 499-711 (voz), escuche el anuncio de la hora y escriba:

date -s hh:mm:ss

pero no presione ENTER hasta no escuchar el beep (puede utilizar ntpdate aquí en lugar de date, y evitar la llamada por teléfono. Esto establece la hora del núcleo (kernel time). Luego escriba:

clock -w

Esto pone en hora la CMOS a partir de la hora del núcleo. Y ahora escriba:

date +%j

(o date +%s si ha usado ntpdate en lugar de date arriba) y escriba el resultado, para la próxima vez.

Restablecimiento de la hora y cálculo de la desviación.

Busque la fecha en que ajustó la hora la vez anterior. Entre como root y escriba:

clock -a

Esto hace que el núcleo tome la hora de la CMOS. Llame al (303) 499-7111 (voz) y escuche el anuncio. Entonces escriba:

date

Presionando ENTER en el momento que escuche el beep, pero mientras está esperando, apunte la hora que escucha y no cuelgue aún. Lo que escucha es la hora que debería tener su máquina cuando se encuentra exacta en el minuto. Escriba:

date hh:mm:00

usando el minuto siguiente al cual acaba de escuchar y presionando ENTER en el momento en que escuche el beep nuevamente (ahora puede colgar). Para hh utilice su hora local. Esto coloca la hora del núcleo (kernel time). Teclee:

clock -w

el cual establecerá la nueva hora (correcta) en el reloj del CMOS. Escriba:

date +%j

(o date +%s si es lo que ha utilizado anteriormente)

Ahora dispone de tres números (dos fechas y un intervalo de tiempo) que le permitirán calcular el desvío horario.

Cálculo del factor de corrección

¿Cuándo ejecutó date en el minuto, su máquina iba atrasada o adelantada? Si iba adelantada, deberá descontar algunos segundos, aunque le resulte un número negativo. Si estaba retrasada, deberá agregar algunos segundos, aunque resulte un número positivo.

Ahora reste ambas fechas. Si usó "date +%j" , el número representando el día del año (1-365 o 1-366 en año bisiesto). Si Usted ha pasado el 1 de Enero entre la primera y segunda fecha entonces deberá agregar 365 (o 366) al segundo número. Si usó date +%s su número está en segundos y deberá dividirlo por 86400 para obtener días.

Si ya tiene un factor de corrección en /etc/adjtime, deberá tomar en consideración el número de segundos que ha corregido. Si ha corregido adelantando, este número tendrá el signo opuesto al del que ha medido; si ha corregido atrasando tendrá el mismo signo. Multiplique el antiguo factor de corrección por el número de días, y añada el número de segundos resultante (adición con signos - si ambos números tienen el mismo signo: obtendrá un número mayor; si tienen signos opuestos, obtendrá un número menor).

Divida el número total de segundos por el número de días para tener el nuevo factor de corrección, y colóquelo en /etc/adjtime en lugar del anterior. Registre la nueva fecha (en segundos o días) para la próxima vez.

He aquí mi /etc/adjtime:

-9.600000 845082716 -0.250655

(¡Nótese que 9.6 segundos por día es aproximadamente cinco minutos al mes!)


Anterior Siguiente Indice