Arrumando o relógio no Linux, NTP e manualmente

Os relógios internos dos computadores costumam a adiantar ou atrasar em alguns minutos depois de alguns meses ligados. Isso acontece porque esses relógios tem imprecisões (como praticamente todo instrumento de medida).

Uma forma de corrigir isso é sincronizar periodicamente esses relógios com relógios ultra precisos (relógios atômicos) ao redor da internet. Os computadores usam um protocolo padrão para sincronizar os relógios e ele se chama NTP.

O Linux pode usar diversos softwares para sincronização NTP. Os principais são:

  • timesyncd (padrão atual do Linux)
  • ntp (com várias funcionalidades)
  • chrony (recomendado pela AWS)

Usando o timesyncd/timedatectl

As versões mais novas do Linux vêm por padrão com um software chamado timesyncd ou timedatectl. Esse software é um cliente NTP bem leve, o cliente NTP é responsável por  É possível dar comandos à ele usando:

timedatectl

Ao executar esse comando, você verá o horário atual. Veja que o Linux tem 3 horários:

  • Local Time, a data/horário no fuso horário salvo no computador
  • UTC, a data/horário em UTC, sem fuso horário
  • RTC, a data/horário do relógio no hardware do seu computador

Comandos úteis com timedatectl

# Salvando um fuso horário (exemplo com horário de São Paulo e UTC/GMT)timedatectl set-timezone "America/Sao_Paulo"timedatectl set-timezone "UTC"# Desligar a sincronização com servidores NTPtimedatectl set-ntp false# Ajustar manualmente o relógio (o tempo que você digitar precisa ser em local time, ou seja, com fuso horário). Para isso, é preciso desligar a sincronização com servidores NTP. Informar o horário em formato ISOtimedatectl set-time "2019-01-01 12:00:00"# Ativar a sincronização com servidores NTPtimedatectl set-ntp true# Ver o horário nos relógiostimedatectl# Veja que existem 3 horários

Vendo logs e debugando o timedatectl (timesyncd)

O software do timedatectl é controlado por trás dos panos pelo timesyncd, um daemon cliente NTP. Para ver o momento em que o relógio foi sincronizado e ver possíveis erros:

sudo systemctl status systemd-timesyncd

Vendo mensagens de status em tempo real

sudo journalctl -f -u systemd-timesyncd

Forçando sincronização com um servidor NTP com o timedatectl (timesyncd)

systemctl restart systemd-timesyncd

Forçando o relógio do hardware sincronizar com o relógio do timedatectl (timesyncd)

Algumas vezes o timedatectl (timesyncd) não atualiza o relógio do hardware (RTC). Uma das maneiras de forçar essa atualização é:

hwclock -w

Adicionando, editando ou removendo servidores NTP no timedatectl (timesyncd)

sudo nano /etc/systemd/timesyncd.conf

Usando o NTP

Se você quer uma solução mais robusta e diferente do timedatectl (timesyncd), pode instalar o ntp, é uma solução completa para gerenciamento de tempo, e inclui também um servidor ntp além do cliente.

Importate! O ntp e o timesyncd não podem funcionar juntos pois eles entram em conflito.

Se você quer apenas ser um cliente e sincronizar o tempo com um servidor, o timesyncd é mais que o suficiente.

Parando o timedatectl (timesyncd) e instalando o NTP

#Para o serviço do timesyncd systemctl stop systemd-timesyncd #Impede que o serviço timesyncd inicie quando o raspbian ligar/reiniciar systemctl disable systemd-timesyncd #Instalando o ntp apt install ntp #Inicia o serviço do ntp systemctl start ntp #Faz com que o serviço do ntp inicie automaticamente quando o raspbian ligar/iniciar systemctl enable ntp

Adicionando IP ou nomes de servidores NTP no NTP

sudo nano /etc/ntp.conf

Dentro do arquivo, você pode adicionar novos servidores NTP.

server 123.123.123.123 iburstserver ntp.org.br

O que é o iburst?
ele envia várias requisições ao servidor NTP ao invés de apenas uma, agilizando a sincronização do relógio.

Como descobrir o tempo do servidor pelo NTP?

ntpq -c "rv 0 clock" ip.do.servidor.com

Desativando o NTP e ativando o timesyncd

Edite o arquivo

sudo nano /etc/systemd/timesyncd.conf

Lá dentro, a variável Servers poderá conter somente:

Servers=172.22.0.1

Agora execute o seguinte:

# desativando a inicializacao do ntp ao iniciar o linuxsystemctl disable ntp# parando o servico do ntp systemctl stop ntp# parando o serviço do timesyncdsystemctl stop systemd-timesyncd# ativando a inicializacao do timesyncd ao iniciar o linuxsystemctl enable systemd-timesyncd # inicia o servico do timesyncdsystemctl start systemd-timesyncd # fazendo o timesyncd usar o servidor ntptimedatectl set-ntp true # mostrando o horário atual pelo timesyncdtimedatectl

Pronto, seu computador agora sincronizará o relógio com o servidor de IP 172.22.0.1

Chrony

É uma alternativa ao ntp e ao timesyncd. É recomendado pela AWS e usado nas imagens Linux dos EC2.

Referências

Ótimo tutorial com vários comandos do timedatectl
https://www.tecmint.com/set-time-timezone-and-synchronize-time-using-timedatectl-command/

Ótimo tutorial com os comandos do hwclock
https://developer.toradex.com/knowledge-base/how-to-use-the-real-time-clock-in-linux

Configurando o NTP Client no Rasbpian
http://raspberrypi.tomasgreno.cz/ntp-client-and-server.html

O que é o iburst na configuração do ntp.conf?
http://community.arubanetworks.com/t5/Controller-Based-WLANs/What-is-the-usage-of-the-iburst-parameter-in-NTP-server/ta-p/267164

Mudando timezone no Raspbian
http://www.ronnutter.com/raspberry-pi-ntp-client-setup/

Configurações em ntp, timesyncd, ntpstat, ntpq
https://www.cyberciti.biz/faq/linux-unix-bsd-is-ntp-client-working/

Manual do timedatectl
https://www.freedesktop.org/software/systemd/man/timedatectl.html

Como descobrir o tempo em um servidor?
https://serverfault.com/questions/220827/how-can-i-compare-an-ntp-servers-time-to-my-servers-time/285294#285294

AWS sobre Chrony
https://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/set-time.html