O que poderia fazer com que o relógio pulasse 5 minutos?

8

Eu tenho uma caixa (física) rodando um Ubuntu despojado; de vez em quando (6 vezes em 3 meses), o relógio salta para trás exatamente 300 segundos (+ - 0,01 segundos; sempre exatamente 300 segundos). Acontece de um minuto para o outro (tenho uma máquina externa pesquisando uma vez por minuto).

A caixa está em execução 2.6.26-genérico (kernel compilado personalizado), Ubuntu 9.04 (eu sei, estou tentando atualizá-lo, mas é semi-incorporado). Não há nada nos logs que indique o que aconteceu, e eu tenho uma grande seleção de servidores ntp pool.ntp.org, que corrigem o problema depois de um tempo.

Alguém sabe o que pode causar isso?

Adicional 1:

Eu também tenho um número de outras caixas rodando o mesmo kernel (idêntico binário), e pequenas variações do mesmo software, que não tem esse problema. Eu também troquei o hardware.

Adicional 2 (resumo dos meus comentários individuais):

  • Sei que o 9.04 está desatualizado, concordo que ele deve ser atualizado e essa decisão está fora do meu controle. Porque o gerenciamento.
  • Eu tentei um grande número de servidores ntp e um pequeno número. Ainda acontece nos dois casos; se eu tiver um grande número de servidores ntp, ele se corrigirá mais rapidamente.
  • Troquei o hardware
  • Estou usando o mesmo kernel / sistema operacional em outra caixa (com hardware idêntico), que não está mostrando o problema.
  • A reinicialização não ajudou. (este problema está em curso há cerca de 6 meses)
  • O tempo de atividade é de cerca de 3 meses. A caixa está "sempre ligada", executando um PBX (asterisco).
  • Neste momento, o hwclock corresponde exatamente ao clock do software - 0.000000 segundos
  • Eu não consegui encontrar nenhuma tarefa do cron que lê o relógio do hardware.
  • Não há padrão relacionado a carga (embora a carga seja bem baixa, de qualquer forma).
  • Acontece durante o dia e a noite.
  • Isso não acontece em intervalos regulares. Dos que nos últimos 3 meses, metade aconteceu nos últimos 9 dias.
  • Isto não é "deriva" - 99% do tempo, está dentro de uma fração minúscula de segundo, então de um minuto para o próximo, salta EXATAMENTE 300 segundos, para trás. Então, um minuto pode dizer que é 3:07:03, combinando meu outro computador com 1 microssegundo, 60 segundos depois, diz 3:04:03.
  • não consigo encontrar nada nos registros.
por AMADANON Inc. 07.01.2014 / 22:49

3 respostas

1

Isso soa como um relógio de tempo real (RTC) em falha. Se este for hardware disponível, você pode confirmar o problema executando um sistema operacional diferente, como inicializar um CD do Linux ou inicialização via PXE, e verificar se é possível replicar a falha. Se a mesma distorção de tempo ocorrer em outro sistema operacional, você confirmou que o problema é uma falha de hardware.

Supondo que seja o RTC, você pode tentar as seguintes soluções em ordem de gravidade.

  • Substitua a bateria do CMOS. Você pode tentar confirmar se é uma bateria com falha testando a voltagem do seu antigo batedor com um multímetro.
  • Alterar RTCs. Se você tiver sorte e tiver uma placa-mãe sofisticada, ela poderá ter dois RTCs. Um relógio de alta precisão que é usado por padrão e um RTC padrão. Verifique as configurações do BIOS / EFI e veja se você pode mudar para o RTC alternativo para evitar o uso do defeituoso.
  • Tente substituir o RTC. Dependendo da idade da sua placa-mãe, seu RTC provavelmente é uma lata de metal ou um chip na placa. Você mesmo pode tentar substituir esse componente se tiver algumas habilidades em eletrônica.
  • Substitua a placa-mãe, uma vez que o RTC ou alguns dos componentes elétricos ou os cabos dessa interface com o RTC estão falhando.
por 03.02.2014 / 08:12
1

Você pode executar um script na caixa que controla os processos em execução e, ao mesmo tempo, monitora o relógio. Se o relógio voltar de repente, ele registra a lista de processos ativos naquele momento. Talvez isso dê uma dica de qual processo muda o relógio.

Claro, isso pressupõe que você tenha um problema de software. Você não encontrará nada desse jeito se seu hardware estiver falhando.

/bin/bash

oldTime=$(date +%s)
oldPsOutput=$(ps faux)
while sleep 1
do
  currentTime=$(date +%s)
  currentPsOutput=$(ps faux)
  if [ "$currentTime" -lt "$oldTime" ]  # clock change detected?
  then
    echo '========='
    echo "$currentTime < $oldTime"
    echo "$oldPsOutput"
    echo ':::::::::'
    echo "$currentPsOutput"
  fi >> /tmp/clockChangeDetector.log
  oldPsOutput=$currentPsOutput
  oldTime=$currentTime
done
    
por 05.02.2014 / 10:54
0

A resposta de Michael Yasumoto parece cobrir todas as bases - eu concordo que você provavelmente está vendo hardwares complicados - mas aqui está uma idéia prática: use uma máquina confiável com conectividade interna muito boa que tenha um punhado de ciclos de sobra para executar um servidor NTP e, em seguida, fazer " o que for necessário " para tornar o cliente NTP em execução na caixa PBX incorporada enviar spam a solicitações de tempo com a freqüência mais freqüente possível (por exemplo, a cada 30 segundos ).

Então, quando a caixa for finalmente atualizada, coloque-a de lado e descubra o que havia de errado com ela em algum ponto (TM). : P

    
por 03.02.2014 / 08:46