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: George Anderson de Lima Guimarães
Data de Publicação: 08 de Novembro de 2005
Esse breve tutorial irá abordar os conceitos básicos por trás do controle de data e hora no Linux, como setar corretamente a data do seu sistema e como mantê-la precisa ao longo do tempo.
Algumas ferramentas que representam a interface entre usuário e SO para
operações com data serão abordados, como: date
, hwclock
e adjtimex
,
disponíveis em todas as distribuições.
Nesse tutorial vou além de jogar comandos para o leitor e tentar explicar um pouco do complexo processo que existe por trás do reloginho do pingüim.
Existem dois principais sistemas de hora no Linux:
timer
. Aqui
o Relógio da BIOS é utilizado apenas pra marcar a data/hora quando o sistema
não está ligado. No processo de boot essa data/hora armazenada na BIOS é
lida e nunca mais requisitada até o próximo boot.
O comando date
, bastante conhecido, informa a data e hora do sistema em
diversos formatos especificados pelo usuário. Por exemplo, para imprimir a
data e a hora com o mês por extenso o comando seria:
$ date +"%d de %B de %Y"``
Note que concateno com "de" para produzir algo como: ``31 de Outubro de 2005``. Mais Exemplos:
$ date -s 10:00 (seta a hora para as 10:00) $ date -s Qua (vira o dia para quarta-feira as 00:00) $ date -s "11/01/2005 13:55" (ajusta data e hora de uma vez)
A data trazida pelo comando date
é a data que o sistema tem controle,
ou seja, o relógio de Sistema. Pode-se ajustar sua data e hora conforme
necessário, porém a mesma não será mantida até o próximo boot, quando o
sistema fará uma nova requisição ao relógio do Hardware para ajustar-se.
Ajustar a data/hora do sistema agora passa então a ser uma operação de duas etapas: na primeira atualizamos a data/hora do Sistema; na segunda sincronizamos essa hora definida no Sistema com aquela definida na BIOS.
Vejamos um exemplo onde queremos modificar a data do Sistema para 31 de Outubro de 2005 e atualizar na BIOS:
$ date -s 10/31/2005``
Ok, agora precisamos fazer o hardware receber a hora setada no sistema:
$ clock -w
clock
é um link para hwclock
e a opção -w
faz exatamente o que
queremos: usar a data/hora do sistema para atualizar a data/hora da BIOS. O
contrário também é possível, podemos utilizar a data/hora da BIOS para setar
nosso sistema, trocando a opção -w
por -s
. Isso é feito pelo sistema
na inicialização.
Que o Relógio da BIOS não é muito preciso não é novidade para ninguém. É
sabido por todos que ele sempre atrasa ou adianta um pouco ao longo
do tempo. O interessante é que essa diferença é previsível, ou seja, ele
ganha ou perde a mesma quantidade de tempo todos os dias. Isso é chamado de
desvio sistemático. Para sistemas onde a precisão nos horários é crítica,
como por exemplo, numa companhia aérea, essa perda pode significar prejuízos
e constrangimento para os passageiros. Por sorte, a função de ajuste em
hwclock
permite correções também sistemáticas desses desvios.
Funciona da seguinte forma: hwclock
mantém um arquivo (/etc/adjtime
),
com algumas informações históricas do tempo. Suponha que você não tem em
seu sistema esse arquivo, ao emitir o comando hwclock --set
, hwclock
cria o arquivo e armazena a hora corrente como a última vez em que a hora foi
"calibrada".
Imagine que após cinco dias, o relógio ganhou 10 segundos, então você emite
novamente o hwclock --set
para diminuir os 10 segundos e Hwclock
atualiza o arquivo de ajuste (adjtime) como a última vez que a hora foi
calibrada e agora vem o interessante: além da última hora calibrada ele também
armazena 2 segundos (10s/5 dias) como sua taxa de desvio sistemático. 24 horas
depois um simples hwclock --adjust
é suficiente para manter a hora do
sistema exatamente como foi ajustada. Toda vez que você re-calibrar a hora,
será feito o cálculo do desvio.
Após isso uma boa dica seria colocar o comando de ajuste hwclock --adjust
para rodar logo após o hwclock --hctosys
na inicialização do sistema e
também periodicamente utilizando a cron se o sistema não for reinicializado
com frequência.
Uma outra opção um pouco mais complexa seria utilizar o adjtimex
para
fazer uma rápida calibragem do sistema. O primeiro passo seria descobrir o
Desvio diário, ou seja, quanto o sistema atrasa ou adianta em 24hs e aplicar
essa informação. Por exemplo, vamos supor que seu sistema ganha 8 segundos
por dia. Então descobrimos que precisamos de 9999 microsegundos a mais a cada
tick do kernel - tick são batidas, como o tic-tac de um relógio de verdade
(1 unidade de tick equivale a 8.64 segundos). Segundo a equivalência teremos
agora um atraso de apenas 0.64 por dia. Para corrigir o restante do erro
precisamos alterar também o valor do offset da frequência (a diferença com o
clock do processador) com o seguinte: (2^16)*0.64/0.864 = 485452. Colocando
a seguinte linha no rc.local
corrigimos o desvio - Eu falei que esse era um
pouco mais complicado:
adjtimex --tick 9999 --freq 485452
Existem outros modos de manter o relógio do sistema sincronizado, por exemplo, utilizando o horário de servidores na internet como referência - geralmente utilizando o NTP[1] (Network Time Protocol). Porém, algumas vezes, fazer essa sincronização pela internet pode ser um tanto quanto perigoso ou custoso ou até mesmo impossível se o servidor estiver isolado da web por medida de segurança.
[1] - http://www.ntp.org/
[2] - Página de Manual do date.
[3] - Página de Manual do hwclock.
[4] - Página de Manual do adjtimex.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários