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 NTP timedatectl 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 ISO timedatectl set-time "2019-01-01 12:00:00" # Ativar a sincronização com servidores NTP timedatectl set-ntp true # Ver o horário nos relógios timedatectl # 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 timesyncdsystemctl 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 timesyncd systemctl stop systemd-timesyncd # ativando a inicializacao do timesyncd ao iniciar o linux systemctl enable systemd-timesyncd # inicia o servico do timesyncd systemctl start systemd-timesyncd # fazendo o timesyncd usar o servidor ntp timedatectl set-ntp true # mostrando o horário atual pelo timesyncd timedatectl
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