Existe uma maneira confiável de sincronizar o relógio de um servidor linux totalmente offline, que é conectado apenas ocasionalmente a um cliente?
Imagino que passar um único número "milis-desde-época" para o servidor pode não ser preciso, embora seja simples.
Gostaria de saber se é possível "alimentar" o NTPD (executando no servidor) com as informações necessárias obtidas pelo cliente do servidor NTP.
O importante a notar é que o relógio na máquina não é necessariamente confiável; ele pode derivar, e máquinas diferentes derivam em taxas diferentes.
ntp
tenta medir esse desvio, mas precisa de tempo conectado suficiente para fazer uma aproximação.A maneira padrão de manter a sincronização do relógio para máquinas que não podem (por algum motivo) sincronizar com servidores NTP na Internet é ter uma fonte de hora local 'autorizada'. Normalmente é um receptor GPS. Agora sua máquina tem acesso a uma fonte de tempo precisa.
Sem uma fonte de tempo externa, não há nada em sua máquina que possa ser considerado suficientemente confiável.
Agora, se você não está totalmente preocupado com a precisão e apenas deseja 'resincronizar' na conexão, executar
ntpdate
quando o link for estabelecido pode ser suficiente. Você deve estar ciente de que isso pode fazer com que o relógio atrase , então isso não é recomendado (o tempo do Unix deve aumentar monotomicamente), mas pode não prejudicar seu caso de uso.Usar o GPS é de fato a maneira mais simples de sincronizar os relógios do sistema. Minha conexão com a Internet é normalmente boa, mas esta é a Frontier e há cerca de alguns dias de interrupção por ano. Como eu sincronizo os relógios da minha câmera de segurança IP da Internet, e essas câmeras têm relógios internos muito ruins, eu precisava de algo mais estável. Então eu fui para o GPS.
Tentei configurar o ntpd e o gpsd juntos, mas todas as etapas descritas na Internet pressupõem que você esteja usando um sinal PPS, o que requer um GPS mais caro e patches de kernel. Eu não estava interessado em nenhum dos dois, não querendo manter meu kernel Linux manualmente para sempre.
Por outro lado, eu sabia um pouco sobre NTP e GPS e estava interessado em aprender mais. Um servidor NTP é realmente muito simples (o cliente faz a maior parte do trabalho). Já trabalhei com GPS e NMEA no passado. Comprei um mouse GPS USB barato (cerca de US$ 12). Levei algumas semanas de trabalho intermitente, mas agora tenho um servidor NTP com quase nenhuma configuração necessária, fácil de instalar em um Raspberry Pi ou Debian PC: HouseClock .
Além disso, não gosto das ferramentas de servidor NTP existentes: incorporei um console da Web usando minha própria biblioteca de servidor da Web echttp .
No geral, gastei mais tempo do que descobrindo como configurar o gpsd, mas tenho a capacidade de monitorá-lo (e outros equipamentos) automaticamente a partir de um cliente da web... que é meu futuro projeto de estimação. Além disso, tive alguns problemas com a sincronização de tempo com minhas câmeras IP, e poder monitorar a atividade do cliente NTP me ajudou a descobrir (um bug de firmware da câmera em anos bissextos).
Todos os avisos são que, sem o PPS, a sincronização do GPS não é muito estável além de 1 segundo. Minha experiência é que é estável, mas pode sair de 50 a 100 ms por algum tempo. Quem se importa: não estou fazendo experimentos de física de partículas. Uma precisão de 1 segundo é suficiente.
Como eu tinha outro Raspberry Pi não muito carregado, comprei um segundo mouse GPS e, voila, um par redundante de servidores NTP caseiros.