martes, junio 18, 2013

La persistencia de la memoria, o "Los relojes blandos" de Salvador Dali
Bien lo decía Einstein... el tiempo es relativo...

Como sumar 4 minutos al sistema...

              A veces es necesario inventarse soluciones que por mas que googleas no las hallas... resulta que tengo un proceso corriendo en mi servidor Linux para decir la hora a través de las estaciones de radio de que administro, pero cada vez que el sistema emitía la hora, siempre se quedaba 4 minutos atrasado, (Esto ya lo tengo detectado... tiene que ver con el retraso de la señal a procesar desde que se emite hasta que se recibe en el servidor y lo retransmite, el momento en que se ejecuta, el proceso para decir la hora, la creacion del archivo resultante etc etc, ) esto realmente no me representaba mucho problema porque al momento de escuchar la hora en la radio pocas veces volteas a ver el reloj para verificarla, pero... Porque dejar ese detalle sin resolver ? resulta que con detalles como este acabas aprendiendo mucho mas de lo que imaginabas. . . al final aunque es un detalle pequeño no deja de ser algo que se podía arreglar... así que me di a la tarea de ajustar el "tiempo del servidor" y me encontré con varias cosas a tomar en cuenta para que esto funcionara.

HIPOTESIS

Bastaría con solo adelantar el reloj del servidor 4 minutos y se resuelve correctamente este problema:

 $date --set "00 : 04"  (ejemplo)

Pero para tener la hora exacta el servidor hace uso de Network Time Protocol sincronizando el tiempo con el comando:

 $ntpdate-debian 

Así que el resultado al final es la sincronizacion de mi servidor sin la suma de 4 minutos

LA SOLUCION

Comence primero analizando como podria sumar esos 4 minutos al sistema y los simplifique en solo tres acciones

Las enumero a continuación...

  1. Tomar el tiempo correcto de algún servidor de tiempo
  2. Al alcanzar las 23 horas hay que pasar a la siguiente en tiempo, no en numero, que seria precisamente las 00:00 horas 
  3. Al sumar los 4 minutos tomar en cuenta que si se llega al minuto 56 hay que pasar a la siguiente hora consecutiva (para los ansiosos: se resuelve con una variable y se suma una unidad)
Todo esto lo podria resolver desde mi adorado BASH utilizando algunas variables y unos caluclos sencillos.

OPERACIONES

Sumar una unidad a la hora

HORAMASUNO=`expr $HORA + 1`

Ajustar los minutos a partir del minuto 56 de cada hora ya que al sumar:

56 + 4 = 60
57 + 4 = 61
58 + 4 = 62
59 + 4 = 63

Otro problema a resolver . . .

Al ingresar estos datos al comando "date" no los acepta porque no tiene el formato correcto, (no entiende "60, 61, 62, 63" minutos asi que se debe hacer un ajuste para que el sistema tome el nuevo tiempo en el servidor, esto lo consegui  precisamente realizando un script que me ajustara este tiempo

EL PROGRAMA FINAL































Con este programita, resolvi el problema de adelantar 4 minutos a mi servidor para que en la estacion de radio se escuchara la hora de forma correcta cuando se transmite al aire, al final inclui en el arranque del servidor este programa (/etc/init.d) para que en cualquier reincio se ajustara el tiempo.

Yo se que tal vez para muchos no es practico este ejemplo, pero alguna vez podran consultar como adelantar la hora del sistema en algun servidor si asi lo require alguna aplicacion.

2 comentarios:

Unknown dijo...

No he podido resistir la tentación
de re-escribir tu rutina

Aquí va:
<<<
#!/bin/bash
# Ajustar hora al servidor
# ++ 4 minutos


# ajustar hora al servidor

ntpupdate-debian

# ++4 minutos

HR=` date +%H` # horas
MI=` date +%M` # minutos

# minutos en 1 hora < 60
MI4=` expr \( $MI + 4 \) % 60 `

# horas por dia < 24
HR4=`expr \( $HR + \( \( $MI + 4 \) / 60 \) \) % 24 `

# salida

echo date --set " $HR $MI4 "

# exit
>>>

Mi observación:
usas demasiadas preguntas ( case )
y por cada pregunta el programa adquiere mayor complejidad.

Q' Tengas un buen día.
o/

Serge dijo...

Muchas gracias por las observaciones, de hecho en el articulo efectivamente yo sentía hacer muchas cosas, pero fue en ese momento lo que se me ocurrió hacer para resolver mi problema, en esto vamos aprendiendo constantemente y solo así vamos afinando nuestro conocimiento, agradezco mucho, primero que hayas leído mi articulo y segundo te hayas tomado el tiempo de rehacer la rutina, créeme que la tomare en cuenta.

Saludos !!!