De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
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