Gerenciamento de Horário do Sistema - date, timedatectl, NTP, chrony
O Que Você Vai Conquistar
- Mostrar o horário atual com
datee alternar entre formatação e definição - Explicar a relação entre o relógio do sistema e o relógio de hardware (RTC) usando
hwclock - Gerenciar fuso horário e sincronização de tempo juntos com
timedatectl - Configurar sincronização de tempo com NTP (
ntpd/chrony) e verificar seu estado - Responder as perguntas frequentes do exame "UTC vs hora local" e "definição manual vs conflito NTP" com raciocínio
Este é o núcleo do objetivo 108.1 do LPIC-1 "Manter o horário do sistema". Correlação de logs, disparo preciso do cron e validação de certificados TLS dependem de um horário correto.
Em Qual Camada o Horário do Sistema é Gerenciado?
O horário do Linux é gerenciado em duas camadas: o relógio do sistema (um relógio de software mantido pelo kernel) e o relógio de hardware (o RTC na placa-mãe). A sincronização diária tem como alvo o relógio do sistema, enquanto o RTC fornece o valor inicial no boot.
| Relógio | Substância | Comando | Quando desligado |
|---|---|---|---|
| Relógio do sistema | Relógio de software dentro do kernel | date / timedatectl |
Perdido |
| Relógio de hardware (RTC) | Chip com bateria na placa-mãe | hwclock |
Mantido |
No boot, o horário é lido do RTC para o relógio do sistema (hctosys), e durante a operação o NTP corrige o relógio do sistema. Gravar o relógio do sistema de volta no RTC com hwclock --systohc mantém o valor inicial do próximo boot preciso.
Em sistemas systemd, a leitura e escrita do RTC no boot são tratadas automaticamente, então operações manuais com hwclock geralmente são desnecessárias. Quando a sincronização NTP está habilitada, o timedatectl atualiza o RTC periodicamente.
Mostrando e Definindo Horário com date
date mostra e define o horário atual do sistema. Especificadores de formato começando com + permitem formatar a saída livremente. A definição requer root, mas evite definição manual enquanto a sincronização NTP estiver ativa.
Mostrando o horário e especificadores de formato
date date '+%Y-%m-%d %H:%M:%S' date '+%Y%m%d' date -u
Sat May 30 14:23:07 JST 2026 2026-05-30 14:23:07 20260530 Sat May 30 05:23:07 UTC 2026
Os principais especificadores de formato são %Y (ano com 4 dígitos), %m (mês), %d (dia), %H (hora, 24h), %M (minuto) e %S (segundo). A flag -u mostra o horário em UTC. date '+%Y%m%d' é clássico para gerar nomes de arquivos de backup.
Definindo o horário manualmente
sudo date -s '2026-05-30 14:30:00'
Sat May 30 14:30:00 JST 2026
-s (--set) define o horário diretamente. No entanto, em ambientes onde a sincronização NTP está habilitada, a definição é sobrescrita pelo NTP quase imediatamente. Para definir manualmente, pare a sincronização primeiro (veja abaixo).
Operando o Relógio de Hardware com hwclock
hwclock lê e grava o RTC. --systohc copia o horário do sistema para o RTC, e --hctosys copia o RTC para o horário do sistema. Se o RTC é mantido em UTC ou hora local é um ponto frequente no exame.
Lendo o RTC e direção de sincronização
sudo hwclock --show sudo hwclock --systohc sudo hwclock --hctosys
2026-05-30 14:31:05.123456+09:00
--show (-r) exibe o valor atual do RTC. Memorize a direção pelo nome.
| Opção | Direção | Finalidade |
|---|---|---|
--systohc (-w) |
Sistema -> RTC | Salvar horário correto do sistema no RTC |
--hctosys (-s) |
RTC -> Sistema | Inicializar horário do sistema a partir do RTC |
UTC vs hora local
sudo hwclock --systohc --utc sudo hwclock --systohc --localtime
Com --utc o RTC é tratado como UTC; com --localtime é tratado como hora local. UTC é fortemente recomendado para sistemas somente Linux. Manter o RTC em hora local tende a causar correções duplas e desvio em mudanças de horário de verão ou mudanças de fuso horário.
Em dual boot com Windows, o Windows trata o RTC como hora local por padrão, então ou ajuste o lado Linux com --localtime ou mude o Windows para usar UTC. Misturar os dois faz o horário desviar a cada boot.
Gerenciando Horário e Fuso Horário com timedatectl
timedatectl é o comando padrão em sistemas systemd, gerenciando horário, fuso horário, sincronização de tempo e modo RTC em um só lugar. Executar timedatectl sem argumento retorna a mesma saída que status.
Verificando o estado atual
timedatectl status
Local time: Sat 2026-05-30 14:35:12 JST
Universal time: Sat 2026-05-30 05:35:12 UTC
RTC time: Sat 2026-05-30 05:35:11
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
System clock synchronized e NTP service mostram o estado de sincronização. RTC in local TZ: no indica que o RTC é mantido em UTC (o estado recomendado).
Definindo o fuso horário
timedatectl list-timezones | grep Tokyo sudo timedatectl set-timezone Asia/Tokyo
Asia/Tokyo
list-timezones lista os fusos horários disponíveis, e set-timezone define um. Isso atualiza o link simbólico /etc/localtime (veja abaixo).
Habilitando sincronização de tempo
sudo timedatectl set-ntp true
set-ntp true habilita e inicia o primeiro serviço de sincronização de rede existente (tipicamente systemd-timesyncd em sistemas systemd). Use false para desabilitar. Para definir o horário manualmente, primeiro pare a sincronização com set-ntp false.
Mantendo o RTC em UTC
sudo timedatectl set-local-rtc 0
set-local-rtc 0 mantém o RTC em UTC (recomendado). Definir 1 o torna hora local, mas a documentação oficial afirma que "manter o RTC no fuso horário local não é totalmente suportado e criará diversos problemas com mudanças de fuso horário e ajustes de horário de verão. Se possível, mantenha o RTC em modo UTC."
Quais Arquivos Determinam o Fuso Horário?
O fuso horário do sistema é determinado por qual arquivo sob /usr/share/zoneinfo/ é apontado por /etc/localtime. Sistemas baseados em Debian adicionalmente mantêm o nome do fuso como texto em /etc/timezone.
| Caminho | Função |
|---|---|
/usr/share/zoneinfo/ |
Armazenamento de todas as definições de fuso (binário) |
/etc/localtime |
Link simbólico apontando para o fuso do sistema |
/etc/timezone |
Nome do fuso como texto (família Debian / Ubuntu) |
ls -l /etc/localtime
lrwxrwxrwx 1 root root 30 May 30 14:00 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
Usar timedatectl set-timezone mantém este link e /etc/timezone consistentes automaticamente. É mais seguro do que relinkar manualmente. Uma alteração temporária por usuário também é possível com a variável de ambiente TZ.
Sincronizando Horário com NTP
NTP (Network Time Protocol) é um protocolo que busca horário preciso de servidores upstream para corrigir o relógio do sistema. Há três implementações: o clássico ntpd, seu sucessor chrony e o leve systemd-timesyncd.
Diferenças entre as três implementações
| Implementação | Arquivo de configuração | Comando de verificação | Características |
|---|---|---|---|
ntpd (referência ntp.org) |
/etc/ntp.conf |
ntpq -p |
Longa história, documentação abundante |
chrony (chronyd) |
/etc/chrony.conf |
chronyc sources / chronyc tracking |
Forte com conexões intermitentes e VMs |
systemd-timesyncd |
/etc/systemd/timesyncd.conf |
timedatectl status |
Apenas cliente SNTP, leve |
Executar múltiplos daemons de sincronização no mesmo host gera conflitos, então habilite apenas um.
Verificando o ntpd
ntpq -p
remote refid st t when poll reach delay offset jitter ============================================================================== *ntp1.example.com 133.243.x.x 2 u 45 64 377 8.123 0.512 0.087 +ntp2.example.com 133.243.x.x 2 u 38 64 377 12.456 -0.231 0.142
ntpq -p (peers) lista os servidores pares. Um * inicial marca o servidor atualmente em sincronização, + marca um candidato a sincronização. reach é a alcançabilidade (octal; 377 significa que as últimas 8 consultas tiveram sucesso), e offset é a diferença de tempo em relação ao local (milissegundos). Os servidores são especificados com linhas server em /etc/ntp.conf.
Verificando o chrony
chronyc sources chronyc tracking
MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ntp1.example.com 2 6 377 23 +12us[ +18us] +/- 14ms ^- ntp2.example.com 2 6 377 21 -103us[ -103us] +/- 21ms
Em chronyc sources, a coluna M é o modo da fonte (^ é um servidor), e a coluna S é o estado de seleção (* significa em sincronização). Stratum é o número de saltos a partir de um relógio de referência, e Reach é o registrador de alcançabilidade. chronyc tracking mostra detalhes da qualidade de sincronização como Reference ID, Stratum, System time (o offset atual entre o relógio NTP e o relógio do sistema), Last offset e RMS offset. Os servidores são especificados com linhas server / pool em /etc/chrony.conf.
Para o exame, memorize o mapeamento: "chronyc sources para fontes de tempo, chronyc tracking para detalhes da sincronização" e "ntpq -p lista os peers do ntpd". Os nomes dos arquivos de configuração (/etc/ntp.conf e /etc/chrony.conf) também são frequentemente cobrados.
Erros Comuns e Correções
O gerenciamento de horário é propenso a conflitos entre configurações e a confusão entre UTC e hora local. Aqui estão casos típicos cobrados no exame e vistos na prática.
- Confundir UTC e hora local: Gravar com
--localtimeenquanto o RTC deveria estar em UTC faz o horário desviar pelo offset do fuso horário (3 horas no horário de Brasília) a cada boot. Padronize em UTC para sistemas somente Linux. - Conflito entre NTP e definição manual: Definir o horário manualmente com
date -souhwclock --systohcenquanto a sincronização NTP está ativa é sobrescrito pelo NTP imediatamente. Para definir manualmente, primeiro pare a sincronização comtimedatectl set-ntp false(ou pare o daemon relevante). - Executar múltiplos daemons de sincronização simultaneamente: Iniciar tanto
ntpdquantochronydfaz ambos disputarem a mesma porta e função, desestabilizando a sincronização. Habilite apenas um. - Mudança de fuso horário sem efeito: Editar
/etc/localtimemanualmente mas deixá-lo inconsistente com/etc/timezone(família Debian). Usartimedatectl set-timezonemantém ambos consistentes. - Mudança de fuso não afeta processos em execução: Mesmo após mudar o fuso horário, daemons já iniciados (cron, aplicações) podem manter o fuso antigo. Reinicie os serviços após a mudança.
Solução de Problemas
Problemas de sincronização de tempo são mais rápidos de isolar na ordem "sintoma -> causa -> verificação -> correção".
Sintoma: timedatectl não sincroniza (System clock synchronized: no)
Causa: O serviço de sincronização de tempo está desabilitado, ou o servidor NTP está inacessível
Verificação:
timedatectl status sudo systemctl status systemd-timesyncd
Correção: Habilite a sincronização com sudo timedatectl set-ntp true. Se ainda mostrar no, verifique se o firewall não está bloqueando a porta UDP 123 e se as linhas server no arquivo de configuração estão corretas.
Sintoma: Horário definido com date -s reverte imediatamente
Causa: A sincronização NTP está habilitada e sobrescreve a definição manual instantaneamente
Verificação:
timedatectl status
Correção: Se System clock synchronized: yes, este é o comportamento normal. Para definir o horário intencionalmente, pare a sincronização com sudo timedatectl set-ntp false primeiro, depois execute date -s.
Sintoma: Horário desvia pelo offset do fuso horário a cada boot
Causa: O modo do RTC (UTC / local) e a interpretação do sistema discordam
Verificação:
timedatectl status sudo hwclock --show
Correção: Para sistemas somente Linux, padronize o RTC em UTC com sudo timedatectl set-local-rtc 0. Para dual boot com Windows, alinhe ambos os lados em um modo.
Lista de Verificação
- [ ] Verificou horário, fuso e estado de sincronização com
timedatectl status - [ ] Definiu o fuso horário correto com
timedatectl set-timezone - [ ] Habilitou a sincronização de tempo com
timedatectl set-ntp true - [ ] Verificou a alcançabilidade das fontes de tempo com
chronyc sources/ntpq -p - [ ] Confirmou que o RTC é mantido em UTC (
set-local-rtc 0)
Resumo
| Cenário | Comando | Finalidade |
|---|---|---|
| Mostrar horário | date '+%Y-%m-%d' |
Exibir com formato personalizado |
| Verificar estado | timedatectl status |
Verificar horário, fuso e sincronização |
| Definir fuso | timedatectl set-timezone |
Alterar o fuso horário |
| Controlar sincronização | timedatectl set-ntp true |
Habilitar sincronização NTP |
| Gravar no RTC | hwclock --systohc |
Salvar horário do sistema no RTC |
| Verificar chrony | chronyc sources / tracking |
Fontes de tempo e qualidade da sincronização |
| Verificar ntpd | ntpq -p |
Listar servidores pares |
O horário do sistema é a base dos logs, cron e validação de certificados. Após dominar o 108.1, combine com o gerenciamento de logs dependente de tempo e o agendamento de tarefas para completar seu conhecimento operacional.
Próximas Leituras
- Hub de Aprendizado LPIC-1
- Logs do Sistema: journald e rsyslog
- Agendamento de Tarefas: cron e at
- Objetivos do Exame LPIC-1 v5.0