É uma correção ntpdate atômica?

5

Eu tenho o seguinte em / var / log / syslog, de ontem (30 de julho)

Dec 16 22:54:05 omap ntpdate[432]: step time server 91.189.94.4 offset 12052648.821465 sec

ntpdate 91.189.94.4 "corrigiu" meu relógio de 30 de julho a 16 de dezembro! De acordo com o link , esse servidor não estava desligado por mais de 2 ms.

Agora, eu tenho um script que chama o comando date quando o sistema é inicializado para definir o relógio com precisão de ~ 1s. O tempo aproximado é lido de uma rede local e date é chamado para definir a hora. Eu tenho que fazer algo nesse sentido, já que o sistema não tem relógio de tempo real, e uma conexão com a Internet pode não estar disponível para o NTP.

Não tenho certeza de como o Linux adivinha o horário inicial, quando não há relógio disponível, mas observei que pode estar muito errado (o que é razoável). Meu único pensamento sobre o que aconteceu é:

  1. O sistema inicializou e inicializou o relógio para algo diferente, digamos 15 de março
  2. ntpdate começou a conversar com o servidor NTP, determinando como o dia 15 de março foi comparado com a data real
  3. Meu script definiu o relógio do sistema para 30 de julho
  4. ntpdate determinou que o relógio estava 12052648s lento e adicionou a correção, supondo que o relógio ainda estivesse em 15 de março
  5. 12052648s foi na verdade adicionado em 30 de julho, trazendo o relógio para 16 de dezembro.

Francamente eu não estou muito familiarizado com o funcionamento do NTP. O acima é razoável? Poderia haver outra explicação?

    
por Peter Woo 31.07.2012 / 22:26

3 respostas

4

Sem saber mais sobre sua configuração, sua teoria parece plausível.

Você desejará alterar seus scripts de inicialização para garantir que seu comando date , que define a data do sistema, esteja completo antes que ntpdate seja iniciado.

    
por 31.07.2012 / 22:29
6

Não tenho certeza de como seu relógio entrou na condição em que está, mas posso sugerir que você elimine o script que chama o comando date , se possível?

O método usual para configurar o relógio do sistema na inicialização na maioria dos sistemas com os quais trabalhei é:

  1. Inicie a rede.
  2. Inicie o ntpd com o -g para sincronizar o relógio.

-g é uma opção new-ish que permite ao ntpd acelerar o tempo qualquer - Se a sua versão de ntpd não suportar esse fkag, você executaria ntpdate -b some.time.server antes de iniciar o daemon do NTP

Se o seu sistema é tão antigo que está fazendo algo completamente diferente do que isso, ele provavelmente também é tão antigo que não é suportado, então eu não teria nenhum escrúpulo em mudar os scripts de inicialização para ser mais sensato ...

    
por 31.07.2012 / 22:51
3

Por que você não está usando o ntpd?

O ntpd é muito mais eficiente para garantir que o seu relógio esteja correto do que o ntpdate porque ele armazena a atualização em pequenas alterações para evitar qualquer tipo de choque ao sistema.

E definitivamente não altera o seu relógio para um mês diferente acidentalmente !

Eu daria instruções mais precisas sobre como instalar e ativar o ntpd em seu sistema, mas você não especificou sua distro.

    
por 31.07.2012 / 22:46