você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Script para acertar data e hora sem usar o serviço NTP

Colaboração: Ricardo Jurczyk Pinheiro

Data de Publicação: 03 de Março de 2009

Devido a mudanças aqui no trabalho, nossos servidores estão agora atrás de um proxy, que filtra e deixa apenas algumas portas para conexão. E uma das portas bloqueadas é justamente a UDP 123, do serviço NTP. Resolvi procurar um script para fazer o acerto de data e hora via HTTP, consultando o site do Observatório Nacional, e achei o script do Daniel Roque, em http://tinyurl.com/au4apt.

Só que tive alguns problemas bestas com ele (como copiar e colar, e a sintaxe da expressão com o sed). Como professor que sou, resolvi dar uma arrumada no script do meu jeito, e torná-lo mais fácil para que eu e outros possam entender. Afinal das contas, sed pode ser um mistério quase insondável.

Download do script

Aqui vai o script:

#!/bin/sh
#
# Acerta Hora - este script foi feito para acertar a data e a hora de uma
# maquina Linux, sem usar o serviço NTP.
#
# Seg Fev 16 13:03:25 BRT 2009
# Originalmente feito por Daniel Roque (2006roque@gmail.com)
# Modificado por Ricardo J. Pinheiro (rjp@email.com.br)
#
NAVEGADOR=$(which elinks)
QUEMSOUEU=$(whoami)
URLDAHORA="http://pcdsh01.on.br/HoraLegalBrasileira.asp"
LOGHORA="/var/log/horacerta.log"
#
# Testes
#
if [ $QUEMSOUEU != 'root' ]; then
      echo 'Voce precisa ser root para executar este comando'
      exit 1
fi
#
if [ ! -e $NAVEGADOR ]; then
      echo 'Voce nao parece ter instalado o programa lynx por favor reinstale e tente novamente.'
      exit 1
fi
#
# Pega a nova hora no servico de hora do Observatorio Nacional.
# O site pode mudar, logo teremos que ter ajustes no script.
#
horarecebida=$(elinks -dump $URLDAHORA | sed -n '/.*\/.*\/.*/p;s/  / /g' | sed -n 2p)
data=$(echo $horarecebida | tr -d "|" | cut -f2 -d" " | tr "/" " " | awk '{print $3,$2,$1}' | tr " " "-")
hora=$(echo $horarecebida | tr -d "|" | cut -f3 -d" ")
horacerta=$(echo $data" "$hora)
if [ "$horacerta" != '' ]; then
      date -s "$horacerta"
      date >> $LOGHORA
else
      echo 'Ha algo errado com o script. Pode ser a URL mudada, verifique.'
      exit 1
fi
exit 0
Ricardo Jurczyk Pinheiro - Linux user #82838 - http://estudiodaintrospeccao.blogspot.com


Veja a relação completa dos artigos de Ricardo Jurczyk Pinheiro