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!)