rbean@execp.com
rodolfo@linux.org.uy
Los chips de reloj-de-tiempo-real (real-time-clock) que son usados en las placas madres de los PC (y también en las costosas estaciones de trabajo) son notoriamente inexactos. Linux dispone de una forma simple de corregir esto por software, haciendo que el reloj sea potencialmente muy exacto sin necesidad de una fuente externa de confirmación del tiempo. Pero muchas personas no reparan en esto, por varias razones:
man clock
" verá clock(3)
, que no es lo que
se quiere. (pruebe "man 8 clock
").
xntpd
de
http://louie.udel.edu
para sincronizar con una fuente externa
el reloj, como un servidor de hora de red o un radio-reloj. Este mini-COMO describe un acercamiento sencillo al tema. Si Usted está
completamente interesado en esto, le recomiendo encarecidamente que
invierta un tiempo en
http://www.eecis.udel.edu/~ntp/
donde encontrará todo
lo relativo a este interesante asunto, incluyendo información completa
sobre xntpd
y enlaces para NIST y USNO (hay más comentarios sobre
xntpd
al finalizar).
Nota:
Si usa más de un sistema operativo en su máquina, debe dejar que solamente uno de ellos corrija el reloj del CMOS, para evitar que uno se confunda con otro. Si regularmente corre Linux y Windows en la misma máquina, puede echar una mirada a algún programa de reloj shareware que este disponible para Windows (siga los enlaces del url indicado arriba).
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.
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).
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.
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.
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.
¿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!)
xntpd
Su sistema actualmente dispone de dos relojes - el alimentado por la batería reloj de tiempo real (real time clock) que mantiene la hora cuando el sistema está apagado (también conocido como el reloj de la CMOS (CMOS clock, Hardware clock o RTC) y la hora del núcleo (kernel time o también conocido como software clock o system clock) que está basado en interrupciones de tiempo y que es inicializado con el reloj del CMOS en el momento del arranque. Ambos relojes pueden diferir en el tiempo que marcan, de hecho gradualmente difieren uno de otro a medida que pasa el tiempo, y también difieren de la "hora real".
Todas las referencias al "reloj" (the clock) en la documentación
de xntpd
se refieren a la hora del núcleo. Cuando ejecute xntpd
o timed
(o cualquier otro programa que ajusta la llamada del sistema
de adjtimex), el núcleo de linux asume que la hora del núcleo es más
precisa que el reloj del CMOS, y ajusta el reloj del CMOS cada 11 minutos
(hasta que apague el sistema).
Esto significa que clock
no sabrá más cuándo el reloj del CMOS
fue ajustado por última vez, y no podrá utilizar el factor de corrección
en /etc/adjtime
. Puede usar ntpdate
en su archivo de
inicialización para poner en hora el reloj desde un servidor de tiempo en
red, antes de iniciar xntpd
. Si no dispone de una fuente de hora
fiable de forma continua cuando arranque la máquina, puede ser algo
complicado, ya que xntpd
realmente no ha sido diseñado para ser usado
en situaciones como esta.
xntpd
incluye controladores para muchos radio relojes, y puede ser
también puesto en hora llamando periódicamente al servicio telefónico NIST
(asegúrese de calcular el efecto en su cuenta telefónica cuando configure
el intervalo entre llamadas). Esto también sirve para obtener el factor de
corrección al reloj del núcleo si se pierde el contacto con las otras
fuentes de ajuste por un período largo de tiempo.
La mayoría de los radio-reloj cuestan $3-4K, pero puede hacer
planes para tener una "caja negra" (actualmente un módem de 300 baudios)
que esté ubicada entre su computador y una radio de onda corta sintonizada
en la estación de tiempo CHU de Canadá (vea
ftp://ftp.udel.edu/pub.ntp.gadget.tar.Z
).
El receptor Heatkit WWV (el "reloj más exacto") está aún disponible (aunque no como kit), y cuesta alrededor de $4-500. La señal de los GPS también contiene información de la hora, y algunos receptores de GPS pueden ser conectados a un puerto serie. Esto podría constituir una solución de bajo costo en un futuro cercano.
En teoría, cualquiera puede escribir un programa para usar los servicios telefónicos de NIST, a fin de calcular la variación de tiempo entre el reloj del CMOS y el del núcleo automáticamente. No tengo noticia de ningún programa que haga esto por si sólo, pero la mayoría del código podría obtenerse de xntpd.
Francisco José Montilla,
pacopepe@iname.com
, FidoNet 2:345/402.22
es
coordinador del INSFLUG: (Impatient & Novatous Spanish
Fidonet LiNUX Users Group) uno de los varios grupos de usuarios
existentes en España, y más concretamente en la mejor ;-) área de FidoNet:
R34.LINUX
junto con LuCas (LinUx en CAStellano).
El INSFLUG se orienta preferentemente a la traducción de documentos breves, como los COMOs y PUFs
Preguntas de Uso Frecuente, las FAQs. :), etc.
LuCas Coordina y realiza las traducciones de las guides, es decir, documentos más extensos.
Por supuesto, la orientación de cada grupo no tiene carácter excluyente; si quiere colaborar en las dos, ¡mejor! ;-).
Otra fuente de información obligada para el recién incorporado son las
PUF elaboradas a partir del correo circulante por R34.LINUX
por
Pablo Gómez,
pgomez@arrakis.es
, 2:341/43.40
, disponibles
próximamente en los formatos habituales de documentación (.ps
,
.dvi
, .html
, .sgml
, etc) en los servidores de Internet
especificados más adelante, así como en el mismo área.
¡Necesitamos su colaboración para futuras traducciones! si quiere unirse a nosotros póngase en contacto con:
INSFLUG: (Traducción y autoría de COMOs)
Francisco José Montilla,
pacopepe@iname.com
, FidoNet 2:345/402.22
LuCas: (Traducción y autoría de guías)
jjamor@ls.fi.upm.es
, FidoNet 2:341/12.19
alfon@bipv02.bi.ehu.es
, FidoNet 2:344/17.2
Por último, recordar que un inmejorable lugar para estar informado, así
como consultar y discutir todo lo relacionado con LiNUX lo tiene en
FidoNet, en R34.LINUX
.
Actualmente, ambos grupos poseen las siguientes listas de correo:
lucas@bipv02.bi.ehu.es
insflug@nova.es
Ambas son listas tipo majordomo; para suscribirse:
envíe un email a
majordomo@nova.es
, con "subscribe insflug
" en el cuerpo
del mensaje.
En el caso de LuCAS sería a
majordomo@infor.es
, con "subscribe lucas
" en el cuerpo
del mensaje.
Dispone de todos los ``COMOs'' traducidos hasta ahora, así como información puntual sobre el INSFLUG y temas relacionados en:
http://www.insflug.nova.es
en sus versiones
html
Actualización lenta, y listas para bajar, en
Este es el lugar actualizado
con más frecuencia; en Sunsite y sus mirrors está replicado en el
directorio
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/es
De todos modos, probablemente con su distribución de Linux vengan
incluidos.
Otro buen punto de búsqueda, consulta, y obtención de la documentación traducida, en formato HTML, con links a los demás formatos, así como las traducciones de las guías traducidas por LuCAS es:
junto con su ftp
:
Tanto el INSFLUG, como LuCAS, y todos los traductores implicados, esperamos que esta traducción le haya sido de utilidad.