Por que o relógio do Ubuntu está ficando mais lento ou mais rápido?

16

O relógio do Ubuntu está desligado em cerca de meia hora:

Hora e Data do Ubuntu v. A hora oficial dos EUA

Onde eu começo a solucionar isso?

Ele está sendo definido "automaticamente da Internet". Como posso verificar se "a Internet" sabe que horas são?

Detalhes

O Ubuntu teve muito tempo para se comunicar com a Internet:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

O servidor de horário que encontrei por meio de uma pesquisa na Web parece saber a hora correta:

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

Não há erros relatados relacionados ao NTP:

$ grep -ic ntp /var/log/syslog
0

Após a reinicialização, a hora foi corrigida automaticamente e o seguinte apareceu em /var/log/syslog:

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

Um log do deslocamento relatado pelo ntpdate revela que o relógio está flutuando cerca de 9 segundos a cada hora:

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

Hora do relógio v. Offset do servidor de horas

ændrük
fonte
Histórico: o ntp é uma ótima ferramenta para manter o tempo exato . Porém, leva um tempo finito (vários minutos ou até horas) para chegar ao horário atual a partir do horário incorreto. Isso está relacionado aos servidores ntp (sua escolha) e à latência da Internet para eles. O @Floyd delineou um atalho para forçar rapidamente a hora correta. Porém, um tempo melhor (e o uso de ntp ) requerem uma seleção cuidadosa de servidores ntp.
David6
Meu carro faz isso ... me deixa louco ... tenho que reverter o tempo 20 minutos por semana ...
TheXed
A primeira coisa que eu tentaria fazer é trocar a bateria na placa-mãe ....
TheXed

Respostas:

17

O ntp faz bem em manter o computador configurado no momento certo e faz isso sem nunca executá-lo ao contrário - o que seria uma coisa ruim para alguns programas que você pode estar executando.

Ele não apenas define o tempo, mas também faz ajustes contínuos na maneira como o computador mantém o tempo, para que o tempo não seja apenas certo em um instante no tempo, mas permaneça próximo ao tempo real (em dezenas de milissegundos, não em dezenas de minutos) . Ajusta a fase (a hora) e a taxa (com que rapidez o relógio "bate"). NTP nunca faz o relógio correr para trás. Pode demorar muito tempo para estabelecer a rapidez com que o relógio é marcado após uma reinicialização, para que o ntp acompanhe a deriva em um arquivo chamado /var/lib/ntp/ntp.drift. Como você não está executando o NTP, nada disso acontece.

O ntp não é tão popular como antigamente porque laptops e desktops adormecidos e máquinas virtuais impedem sua execução algumas vezes. Ele foi projetado para funcionar de vez em quando, de acordo com sua própria programação, em um computador que funciona o tempo todo e no mundo real, onde o tempo é contínuo. É provavelmente por isso que não é instalado por padrão na estação de trabalho moderna. [Para VMware, veja isso]

Em vez disso, o ntpdate é executado quando a interface de rede é ativada. Quando um laptop adormecido é despertado, ele restabelece a conexão de rede, o ntpdate é executado e a hora é novamente correta. Se o relógio de hardware da máquina é bastante preciso e a rede é ativada e desativada com bastante frequência, isso geralmente é bom o suficiente para a maioria das pessoas.

Por alguma razão, o ntpdate de ações nem sempre é executado. Use o ntpdate-debian nesse caso. Sintaxe para o for.mer é algo como ntpdate ntp.ubuntu.com , para o último é ntpdate-debian

Na ausência de uma dessas coisas, o ntp é a melhor maneira de manter o tempo.

Os sistemas são projetados para interromper o cronômetro de vez em quando e atualizar sua idéia do horário a cada interrupção. Enquanto o temporizador do hardware estiver funcionando conforme as especificações. o tempo não muda muito. Se o temporizador do hardware não for, o tempo será desviado mais (todos esses relógios serão levados um pouco, pela mesma razão que o relógio de pulso ou o relógio controlado por bateria. Os relógios conectados à parede são sincronizados com o tempo pela freqüência e fase mantidas por sua empresa de energia).

A maioria dos cronômetros de computador é controlada por um circuito oscilador controlado por cristal em seus circuitos integrados. Apesar do cristal, eles correm mais rápido e mais devagar, dependendo do ambiente, principalmente da temperatura. A menos que você tenha algum tempo sincronizando o software instalado que não conhecemos, eu diria que o relógio do sistema está fora das especificações.

Se você executasse o ntp por um dia ou dois, ele armazenaria informações em /var/lib/ntp/ntp.drift que indicariam quanto seria necessário ajustar a taxa na qual o tempo do sistema operacional avança por interrupção para combine sua taxa de clock de hardware com o tempo real que obtém pela internet. Manter o arquivo igual e apenas iniciar e parar o ntp após um minuto depois (supondo que você mantenha o arquivo /var/lib/ntp/ntp.drift inalterado) pode fazer muito para corrigir isso, se o ajuste da polarização do relógio ntp permanecer após NTP termina. Não tenho certeza desse detalhe.

Eu suspeito que o valor que o ntp armazenaria em /var/lib/ntp/ntp.drift seja muito diferente do meu.

Se essa máquina continuar funcionando o tempo todo, a melhor coisa a fazer é instalar o ntp e deixá-lo fazer o que quer. Veja as outras respostas para obter detalhes sobre como acertar a hora antes de iniciá-la. Eu corro o ntp na minha área de trabalho e o ntpdate no meu laptop.

Uma alternativa possível interessante, adjtimex, é mencionada nesta resposta por nealmcb.

Se o seu sistema não for mantido funcionando o tempo todo, executar o ntpdate no momento da inicialização parecerá uma boa opção.

Aviso: alguns softwares podem surtar se o tempo do computador voltar atrás. A execução do ntpdate após a inicialização pode fazer com que isso ocorra.

Um problema, isso pode ser um problema: Pelo que me lembro, a NTP espera que o tempo não seja muito distante. Se for, tentando agir de forma conservadora, o ntp não ajustará a hora. Se você estiver nessa situação, faz sentido executar as duas coisas - execute o ntpdate na inicialização para inicializar o horário no momento certo e, em seguida, deixe o ntp executar para mantê-lo em execução, fornecendo uma indicação precisa da hora. Em particular, uma bateria ruim da placa-mãe pode causar esse erro, assim como a inicialização de um computador que está desligado há muito tempo.

John S Gruber
fonte
Ótima explicação John! Apenas uma coisinha - a data / hora na maioria das placas-mãe é mantida por um RTC (relógio em tempo real) separado, que usa seu próprio cristal de 32.768 KHz (porque dividir essa frequência por 2 ^ 15 fornece precisamente um segundo) e o FSB O clock, que geralmente está em mais de 100 MHz, não tem nada a ver com a manutenção da data-hora - se o over / underclocking estragasse tudo -, em vez disso, é geralmente um desvio de cristal no módulo / circuito RTC. Você pode procurar esse problema e responder ao comentário e / ou editar sua resposta para refletir isso?
Ish
Eu vou fazer as duas coisas! Eu removi a menção de overclocking porque acho improvável, como eu havia dito. O RTC é usado apenas para definir o horário no momento da inicialização. Como seu comentário menciona, é preciso apenas 1 segundo. A man rtcpágina diz: "Os RTCs não devem ser confundidos com o relógio do sistema, que é um relógio de software mantido pelo kernel e usado para implementar gettimeofday (2) ..." Não sei se o relógio do sistema está relacionado ao relógio FSB . Observando a configuração do kernel, o kernel i386 preciso do último Ubuntu tem o relógio do sistema sendo atualizado em 250Hz. Obrigado pelo comentário!
John S Gruber
@izx No meu sistema laptop, o kernel está usando o HPET como fonte de relógio. É configurável. A Wikipedia diz que isso faz parte da função southbridge. Não sei o que isso diz sobre seu relacionamento com o FSB, mas entendo que o FSB faz parte da ponte norte.
John S Gruber
Obrigado, John e @izx. Estou encantado com a abrangência disso. izx, espero que você não leve para o lado pessoal que eu o marquei como aceito. Eu acho que será a melhor leitura para futuros visitantes.
ændrük
@ ændrük: não há problema algum, como você pode ver, eu também apreciei o rigor de John.
Ish
12

- Normalmente, o tempo é sincronizado apenas uma vez após cada inicialização ou ativação do modo de suspensão

Portanto, o problema parece ser que o servidor de horário padrão do Ubuntu (o que é isso?) Tem o horário incorreto ou o Ubuntu não está definindo o horário automaticamente na Internet.

Não, o servidor de horas do Ubuntu está correto e está definindo a hora automaticamente.

O problema é que isso geralmente ocorre apenas uma vez em cada inicialização (ou, para ser mais preciso, sempre que uma interface de rede é aberta - seja por desligamento, suspensão ou hibernação). Com base no seu tempo de atividade, é seguro dizer que não foi sincronizado em mais de uma semana. E o relógio do sistema está funcionando um pouco rápido por algum motivo.

- Configure um crontrabalho por hora para sincronizar se você não reiniciar com frequência ou se o servidor / desktop nunca dorme

Sua melhor aposta é configurar um cron-job, eu diria a cada hora se você quiser um tempo super preciso. A maneira mais fácil de fazer isso é:

  • sudo editor /etc/cron.hourly/ntpsync

Adicione as seguintes linhas:

#! / bin / bash

ntpdate ntp.ubuntu.com #ou sua escolha de servidor
  • salvar, sair e sudo chmod +x /etc/cron.hourly/ntpsync

Você pode colocar isso /etc/cron.dailyse preferir, uma vez por dia.

ish
fonte
Spot on. Estou aceitando isso por responder corretamente à minha pergunta de por que o relógio está errado, mas sou cético em relação a essa solução alternativa. Vou ter que aprender um pouco mais sobre isso antes de decidir que ação tomar.
19333
Se você definir o servidor de sua escolha no arquivo ntp.conf, precisará redefini-lo aqui?
Snekse
6

Isso pode acontecer se você instalou o daemon ntp time e o tempo em sua máquina está muito longe para ser corrigido rapidamente.

Para consertá-lo, abra um terminal e faça

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

O que isso faz:

  1. Parar daemon ntp
  2. Definir relógio
  3. Agora deve ser a hora certa
  4. reiniciar daemon ntp

Se você não possui o ntp instalado, faça-o com

  sudo apt-get install update

Atualização: O uso do ntpdate em um trabalho cron, conforme recomendado aqui, gera problemas sutis.

O ntpdate fará o tempo "saltar" a cada hora ou mais. O uso de ntp evita esse problema, porque ele ajusta a hora inclinando o relógio. Além disso, embora a seleção de um servidor NTP na vizinhança ofereça uma precisão ainda maior, não é necessário. O arquivo de configuração ntp padrão possui vários servidores e o servidor compensa automaticamente quaisquer atrasos.

Conclusão: - use ntp - se você estiver longe, desligue o ntp, execute o ntpdate uma vez e reinicie o ntp.

Floyd
fonte
/etc/init.d/ntpnão existe. Esta é uma instalação bastante recente do Ubuntu 12.04 e não mudei deliberadamente nada relacionado ao tempo.
Mayndrük
Então eu recomendo instalá-lo.
Floyd
Na medida do possível, prefiro não me intrometer na configuração e nos serviços do sistema. Se esse arquivo não estiver instalado por padrão, por que seria necessário que as configurações padrão de Hora e Data funcionassem?
Mayndrük
11
A hora está correta após uma reinicialização? Eu suspeito que a atualização do relógio apenas executa o ntpdate uma vez. Alguns sistemas têm o problema de que o relógio do sistema mantido pelo Linux execute muito rápido. Eu tive isso em particular com sistemas rodando como máquinas virtuais.
Floyd
11
Se esse problema persistir após a reinicialização ou o desligamento, pode ser que a sua célula CMOS esteja inoperante no MOBO.
atenz 18/05/12
1

Eu tive um problema semelhante e foi causado por algo no firewall. No final, adicionei o trabalho cron horário, mas adicionei o -uargumento para ntpdateque ele usasse uma porta não padrão.

Meu problema foi causado pelo fato de o Ubuntu não ter verificado se ntpdatefuncionava, mas automaticamente assumindo que funcionaria.

Axel
fonte