Forçar o systemd timesyncd a sincronizar a hora com o servidor NTP imediatamente

16

Eu configurei systemd timesyncd para obter a hora de um servidor NTP:

/etc/systemd/timesyncd.conf > NTP=ca.pool.ntp.org
systemctl restart systemd-timesyncd.service 
timedatectl set-ntp true

O status é o seguinte:

$ timedatectl status
...
Network time on: yes
NTP synchronized: no

Como a saída implica, o tempo ainda não está sincronizado. Alguém pode me ajudar com as seguintes perguntas?

  • Quanto tempo levará para o timesyncd sincronizar com o NTP? Em que intervalos isso é feito, onde posso verificá-las e alterá-las?
  • Em casos urgentes: posso definir a hora apenas manualmente ou posso forçar o timesyncd a sincronizar imediatamente com o servidor NTP?
manifestador
fonte

Respostas:

10

Para usar uma implementação NTP real, você precisa instalar e configurar uma, chronyou talvez ntpd. Faça isso se precisar de algum monitoramento do desempenho do tempo. Eu assumirei crony.

Adicionar ibursta seus poolou server linhas na sua configuração para acelerar os poucos pacotes iniciais. Ainda pode demorar alguns minutos para estabilizar, seja paciente.

chronyc trackingmostrará o deslocamento atual. Para ter uma idéia de quais são seus requisitos, a precisão de um segundo pode tolerar facilmente o deslocamento de dezenas de milissegundos.

chronyc makestepfará o ajuste atual imediatamente. Normalmente não é necessário.


timesyncdé um cliente SNTP que pode definir o horário, mas não discipliná-lo gradualmente e continuamente, nem filtrar o servidor NTP remoto com base na qualidade . (Ele também não pode falar com hardware de tempo ou PTP, apenas com o protocolo NTP.) Um pouco melhor que o repetido ntpdate, com o que quero dizer relógio não muito bom. Pessoalmente, eu o substituo na maioria dos servidores.

Sobre a única maneira de definir o tempo com timesyncd é manualmente: timedatectl set-time "2019-01-15 00:40:16". Não possui meios robustos para disciplinar e monitorar o relógio. Estatísticas básicas de NTP via timedatectl timesync-statussão relativamente novas, não acho que essa opção esteja disponível no Red Hat 7 ou no Ubuntu 18.04.

systemd define "sincronizado" como se o NTP fosse usado para dizer ao Linux para ajustar o relógio. Especificamente, se a disciplina do kernel chamar adjtimex () retornou sem erro, e não o estado inicial. Veja o código fonte, systemd / src / basic / time-util.c.

John Mahowald
fonte
Obrigado pela sua resposta, John. Então, na verdade, posso desativar o systemd-timesyncd e usar apenas o chrony? Não sei ao certo por que o systemd tem uma opção NTP e é chamado timeSYNCd se, na verdade, não é possível sincronizar a hora? “Systemd define" sincronizado "para ser se a disciplina do kernel NTP chamar adjtimex () retornou sem erro e não o estado inicial” - isso não está muito claro para mim.
manifestador
1
@chevallier systemd-timesyncd é muito simples e é bom o suficiente para os casos mais comuns, por exemplo, um servidor com um relógio em tempo real que deve estar em execução na rede 24x7. O seu caso não é comum, portanto você provavelmente não deve usá-lo. O chrony é muito melhor para lidar com interrupções na conectividade da rede e ser desligado por longos períodos (por exemplo, um laptop) ou não ter um RTC (por exemplo, dispositivos incorporados).
Michael Hampton
1
O timesyncd é um cliente SNTP, portanto, define o horário sem discipliná-lo adequadamente. O que é adequado para requisitos de precisão grosseira. Se você deseja medir o desempenho do tempo ou aguardar a sincronização, use um NTP completo como chrony ou ntpd.
John Mahowald
11

Sem instalar mais pacotes ... Desligue o NTP, defina manualmente a hora para estar próximo o suficiente , ative o NTP novamente:

Definir serviço NTP inativo

$ timedatectl set-ntp false

Defina a hora manualmente

Sim, isso é triste, mas funciona e você não precisa se preocupar em instalar nada e fazê-lo funcionar. Obtenha a hora LOCAL aproximada no relógio de parede, no telefone e na Internet. Ele não precisa ser perfeito, porque ativaremos o ntp em um momento ...

$ sudo timedatectl set-time "2019-06-22 13:41:00"

Definir serviço NTP ativo

$ sudo timedatectl set-ntp true

Esperar

john@mybox:~$ timedatectl
               Local time: Sat 2019-06-22 13:49:53 AEST
           Universal time: Sat 2019-06-22 03:49:53 UTC
                 RTC time: Sat 2019-06-22 03:49:54
                Time zone: Australia/Sydney (AEST, +1000)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

O "Relógio do sistema sincronizado: não" passará para "sim" quando tiver sido ajustado o suficiente para ser considerado 'em sincronia'.

Solução de problemas

$ cat /etc/systemd/timesyncd.conf
[Time]
NTP=pool.ntp.org

$ timedatectl timesync-status
       Server: 13.210.208.89 (au.pool.ntp.org)
Poll interval: 8min 32s (min: 32s; max 34min 8s)
 Packet count: 0

$ grep systemd-timesyncd /var/log/syslog | tail
Jun 22 14:13:09 meebox systemd-timesyncd[8333]: Timed out waiting for reply from 103.214.220.220:123 (au.pool.ntp.org).

Meus pacotes ntp estavam sendo bloqueados pelo firewall corporativo.

John Mee
fonte
Instalar outro serviço de sincronização de tempo também foi minha primeira ideia, mas isso é apenas uma solução alternativa. Eu estava procurando uma solução real. É você quem responde. Funciona. Obrigado :-)
Ingo