Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

PHP CONFERENCE

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

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato PDF
Newsfeed RSS
Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.04/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (613 votos)

Opinião dos Leitores

Erico Braga
21 Jun 2009, 19:11
COMPREI UM COMPUTADOR COM SISTEMA LINUX UBUNTU, E NÃO ESTOU CONSEGUINDO ACERTAR A HORA. JA TENTEI PELO AJUSTE DE HORA, MAS NUNCA SALVA.
ALEXANDRE NOGUEIRA
18 Abr 2009, 12:52
COMPREI UM COMPUTADOR COM SISTEMA LINUX, E NÃO ESTOU CONSEGUINDO ACERTAR A HORA. JA TENTEI PELO AJUSTE DE HORA DIGITEI A SENHA ADMINISTRADOR MAS QUANDO DESLIGO A MAQUINA E LIGO DE NOVO O LINUX CONTINUA COM A HORA ERRADA.COMO POOSSO CORRIGIR ISTO?
DIEGO ARAUJO SARAIVA
02 Out 2008, 19:01
Eu trabalho em lugar onde tem 6 computadores no mesmo sistema,
eu quero saber como faço para olhar o Horario de entrada de um usuario e a hora de saida dele, Obrigado
Allison
05 Nov 2007, 20:58
Excelente!! Direta e consistente!!

Parabéns ...
luiz
28 Out 2007, 14:37
Super simples, só que eu não sabia.
Obrigado
Fernando Junior
22 Out 2007, 14:54
Como faz para desativar(desabiliar) a atualização do horario automatico do LINUX ?
Jésus de Oliveira
16 Mar 2007, 12:14
Em "DOS" tem como inserir data do micro <DATE> em um arquivo <arquivo>.zip ?

Ex:
* <DIRETORIO> pkzip -rp arquivo<DATE>.zip *.* , onde <DATE> é a data do micro ou <DATE>.zip

Joao
16 Out 2006, 11:29
Linda explicacao,,, me ajudou muito.

Acho que e o melhor conteudo, simples e bem explicado.

OBRIGADO
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

English for Reading and Listening
Enriqueça o seu vocabulário recebendo diariamente mensagens divertidas em inglês, com áudio em MP3.
Saiba mais

Biblioteca

Desenvolvendo Websites com PHP
Por Juliano Niederauer

O Monge e o Executivo: uma História sobre a Essência da Liderança
Por James C. Hunter

Extreme Programming
Por Vinicius Manhaes Teles

UML: Guia do Usuário
Por Grady Booch, James Rumbaugh e Ivar Jacobson

O Vendedor de Sonhos
Por Augusto Cury

Segurança de Redes em Ambientes Cooperativos
Por Emilio Tissato Nakamura e Paulo Licio de Geus

O Conhecimento em Rede
Por Carlos Nepomuceno e Marcos Cavalcanti

Utilizando UML e Padrões
Por CRAIG LARMAN

Sistema de Banco de Dados
Por Abraham Silberschatz

Hardware PC: Guia de Aprendizagem Rápida
Por Carlos E. Morimoto

Manual Completo do Linux: Guia do Administrador
Por Evi Nemeth, Trent R. Hein, Garth Snyder

Redes de Computadores e a Internet
Por James F. Kurose e Keith W. Ross

O Segredo
Por Rhonda Byrne

Os Segredos da Mente Milionária
Por T. Harv Eker

Construindo Sites com CSS e (X)HTML
Por Mauricio Samy Silva

Use a Cabeça!: JSP & Servlets
Por Brian Bashan, Kathy Sierra, Bert Bates

Expressões Regulares: Uma Abordagem Divertida
Por Aurélio Marinho Jargas

Qualidade de Software
Por Andre Koscianski Michel dos Santos Soares

Descobrindo o Linux: Entenda o Sistema Operacional GNU/Linux
Por Joao Eriberto Mota Filho

Enterprise Javabeans 3.0
Por Bill Burke, Richard Monson