Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
How-To - Data e Hora no Linux
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.
1. Como funciona a data/hora no Linux?
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:
- O Relógio do Hardware: que roda independente de qualquer sistema e continua funcionando mesmo quando o pc está desligado. Esse relógio é comumente chamado de Relógio de Hardware, Relógio de Tempo Real, RTC (sigla em inglês para Real Time Clock), Relógio da BIOS e Relógio CMOS.
- O Relógio do Sistema: esse guarda a hora utilizando um relógio dentro do kernel do Linux e é comandado por uma interrupção especial chamada 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.
2. Manipulando Data/Hora de Sistema e de Hardware.
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.
3. Hora crítica: Fazendo do Linux um relógio Suiç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.
4. Referências:
[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.
Veja a relação completa dos artigos de George Anderson de Lima Guimarães
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
21 Jun 2009, 19:11
18 Abr 2009, 12:52
02 Out 2008, 19:01
eu quero saber como faço para olhar o Horario de entrada de um usuario e a hora de saida dele, Obrigado
05 Nov 2007, 20:58
Parabéns ...
28 Out 2007, 14:37
Obrigado
22 Out 2007, 14:54
16 Mar 2007, 12:14
Ex:
* <DIRETORIO> pkzip -rp arquivo<DATE>.zip *.* , onde <DATE> é a data do micro ou <DATE>.zip
16 Out 2006, 11:29
Acho que e o melhor conteudo, simples e bem explicado.
OBRIGADO












