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

16

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

Onde eu começo a solucionar isso?

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

Detalhes

O Ubuntu teve bastante 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

Este servidor de horário que eu descobri 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, o horário foi corrigido 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 offset reportado pelo ntpdate revela que o relógio está à deriva em 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))
'

    
por ændrük 18.05.2012 / 14:59

4 respostas

17

ntp faz bem em manter seu computador configurado no momento certo, e faz isso sem nunca executá-lo de trás para frente - o que seria uma coisa ruim para alguns programas que você pode estar executando.

Ele não apenas ajusta o tempo, mas faz ajustes contínuos em como seu computador mantém o tempo para que seu tempo não seja apenas certo em um instante, mas fique próximo do tempo real ( em dezenas de milissegundos, não dezenas de minutos). Ajusta a fase (o tempo) e a taxa (a rapidez com que o relógio "toca"). ntp nunca faz o relógio correr para trás. Pode levar muito tempo para estabelecer a velocidade do relógio após a reinicialização, para que o ntp acompanhe o desvio 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 quanto antes porque os laptops e desktops e as máquinas virtuais impedem que ele seja executado em parte do tempo. Ele é projetado para ser executado de vez em quando em seu próprio horário em um computador que está sendo executado 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, consulte esta]

Em vez disso, 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 com bastante frequência, geralmente é bom o suficiente para a maioria das pessoas.

Por alguma razão, o estoque ntpdate não funciona sempre. Use ntpdate-debian neste caso. A sintaxe para o for.mer é algo como ntpdate ntp.ubuntu.com , pois o último é ntpdate-debian

Na falta de uma dessas coisas, ntp é a melhor maneira de manter o tempo.

Os sistemas são projetados para fazer uma interrupção do temporizador de vez em quando e atualizar sua ideia do tempo a cada interrupção. Contanto que o cronômetro de hardware esteja executando a especificação. o tempo não se move muito. Se o cronômetro de hardware não estiver, o tempo vai se arrastar mais (todos os relógios se movem um pouco, pela mesma razão que o relógio de pulso ou bateria controlada. Os relógios conectados à parede são sincronizados com a freqüência e fase mantidas por sua empresa de energia).

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

Se você executasse ntp por um dia ou dois, ele armazenaria informações em /var/lib/ntp/ntp.drift que indicariam quanto teria de ajustar a taxa na qual seu tempo de sistema operacional avança por interrupção a fim de combinar sua taxa de relógio de hardware com o tempo real que adquire através da internet. Manter o arquivo igual e apenas iniciar e parar ntp após um minuto depois disso (supondo que você mantenha o arquivo /var/lib/ntp/ntp.drift inalterado) pode fazer muito para corrigir isso se os conjuntos ntp do bias do relógio permanecem após o ntp terminar. Não tenho certeza desse detalhe.

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

Se esta máquina continuar funcionando o tempo todo, o melhor é instalar o ntp e deixar que ele faça o que quiser. Veja as outras respostas para obter detalhes sobre como acertar o tempo antes de iniciá-lo. Eu corro ntp na minha área de trabalho e ntpdate no meu laptop.

Uma interessante alternativa possível, o adjtimex, é mencionado em esta resposta por nealmcb.

Se o seu sistema não for mantido em execução o tempo todo, executar ntpdate no momento da inicialização parece ser uma boa opção.

Atenção algum software pode enlouquecer se a hora do computador voltar ao normal. A execução da ntpdate após a inicialização pode fazer com que isso ocorra.

Uma pegadinha, isso pode ser um problema: se bem me lembro, ntp espera que o tempo não fique muito longe. Se for, tentando agir de maneira conservadora, o ntp não ajustará a hora. Se você está nesta situação, faz sentido fazer ambos - executar o ntpdate na inicialização para obter o tempo inicializado na hora certa, e então deixar o ntp rodar para manter correndo para fornecer cronometragem precisa. 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.

    
por John S Gruber 08.06.2012 / 23:24
12

- Normalmente, o tempo só é sincronizado uma vez em cada inicialização ou ativação / desativação

  

Então, o problema parece ser que o servidor de horário padrão do Ubuntu (o que é?) tem a hora incorreta, ou o Ubuntu não está configurando a hora automaticamente da Internet.

Não, o servidor de horário do Ubuntu está correto e está ajustando a hora automaticamente.

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

- Configure um job cron por hora para sincronizar se você não reinicializar com frequência ou se seu servidor / desktop nunca for suspenso

Sua melhor aposta é configurar um cron-job, eu diria por 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 #or your choice of server
  • salvar, sair e sudo chmod +x /etc/cron.hourly/ntpsync

Você pode colocar isso em /etc/cron.daily , se desejar, por uma vez por dia.

    
por ish 18.05.2012 / 16:16
6

Isso pode acontecer se você tiver instalado o daemon de tempo ntp e o tempo em sua máquina estiver muito longe para ser corrigido rapidamente.

Para consertar, 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 o daemon do ntp
  2. Definir relógio
  3. O tempo agora deve estar certo
  4. reiniciar o daemon do ntp

Se você não tem o ntp instalado, faça isso com

  sudo apt-get install update

Atualização: Usar o ntpdate em um cron job, como foi recomendado aqui, leva a problemas sutis.

O ntpdate fará com que o tempo "salte" a cada hora. Usar o ntp evita esse problema, porque ele ajusta o tempo distorcendo o relógio. Além disso, enquanto selecionar um servidor ntp na vizinhança dá 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.

Linha de fundo:  - use ntp  - se você estiver longe, desligue o ntp, rode o ntpdate uma vez e reinicie o ntp.

    
por Floyd 18.05.2012 / 15:07
1

Eu tive um problema semelhante e isso foi causado por algo no firewall. No final, adicionei o trabalho cron por hora, mas adicionei o argumento -u a ntpdate para que ele não usasse uma porta padrão.

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

    
por Axel 14.09.2012 / 01:06

Tags