Como alterar o fuso horário do servidor Linux para o horário de Brasília com timedatectl, no AlmaLinux, Rocky e Ubuntu, e como fazer no antigo CentOS 6.
O fuso horário define em que hora aparecem os logs, quando as tarefas do cron rodam e qual hora os programas recebem do sistema. O relógio interno do servidor continua em UTC; o fuso só muda a forma como essa hora é mostrada. Em todos os sistemas com systemd, a troca é um único comando.
Antes de começar
- Acesso SSH como
rootou comsudo(veja como acessar o SSH). - Hora certa depende também de sincronização: se o relógio está adiantado ou atrasado alguns minutos, o problema é o NTP, não o fuso. Veja como sincronizar a hora com NTP.
Como alterar o fuso horário com timedatectl
- Veja o fuso atual.
A linha Time zone mostra o fuso em uso, por exemplotimedatectlUTC (UTC, +0000). - Encontre o nome do fuso. Os nomes seguem o formato Região/Cidade. Para listar os do Brasil:
timedatectl list-timezones | grep -E 'Sao_Paulo|Manaus|Cuiaba|Campo_Grande|Porto_Velho|Boa_Vista|Rio_Branco|Noronha|Belem|Fortaleza|Recife|Bahia' - Defina o fuso. Para o horário de Brasília:
sudo timedatectl set-timezone America/Sao_Paulo - Confira. Rode
timedatectlde novo ou sódate. A saída deve mostrar-03, o deslocamento de Brasília. - Reinicie os serviços que guardam o fuso. Programas que já estavam rodando continuam no fuso antigo até serem reiniciados. Os mais comuns:
O MySQL ou MariaDB e o PHP-FPM também leem o fuso ao iniciar. Se a janela de manutenção permitir, reiniciar o servidor resolve tudo de uma vez.# AlmaLinux e Rocky sudo systemctl restart crond rsyslog # Ubuntu e Debian sudo systemctl restart cron rsyslog
Fusos horários do Brasil
| Horário | Nome para o timedatectl | Onde vale |
|---|---|---|
| UTC−2 | America/Noronha | Fernando de Noronha |
| UTC−3 (Brasília) | America/Sao_Paulo | Sul, Sudeste, Goiás, DF, Nordeste, Pará, Amapá e Tocantins (existem nomes regionais, como America/Fortaleza e America/Belem, com o mesmo horário) |
| UTC−4 | America/Manaus, America/Cuiaba, America/Campo_Grande, America/Porto_Velho, America/Boa_Vista | Amazonas, Mato Grosso, Mato Grosso do Sul, Rondônia e Roraima |
| UTC−5 | America/Rio_Branco, America/Eirunepe | Acre e sudoeste do Amazonas |
America/Sao_Paulo é mais prático.Servidor com cPanel
No WHM, o caminho é Server Configuration » Server Time: escolha o fuso, clique em Change TimeZone e reinicie o servidor quando puder. Na mesma tela, Sync Time with Time Server acerta o relógio. A cPanel exige a hora correta para validar a licença.
No CentOS 6 (sem timedatectl)
O CentOS 6 não recebe atualizações desde 30/11/2020 e o ideal é migrar (veja como sair do CentOS 6 e 7). Enquanto isso, o fuso se troca assim:
sudo sed -i 's|^ZONE=.*|ZONE="America/Sao_Paulo"|' /etc/sysconfig/clock
sudo ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
date
Depois, reinicie o cron com sudo service crond restart.
Problemas comuns
A hora do sistema está certa, mas o site ou o PHP mostra outra
O PHP tem configuração própria, a date.timezone no php.ini. Na hospedagem cPanel, ajuste nas opções do PHP (veja como alterar as configurações do PHP no cPanel); no código, use date_default_timezone_set('America/Sao_Paulo').
O MySQL continua gravando no horário antigo
O MySQL e o MariaDB, com time_zone em SYSTEM, só leem o fuso do sistema ao iniciar. Reinicie o serviço e confira com SELECT NOW();.
A hora está uma hora adiantada em parte do ano
O Brasil não tem horário de verão desde 2019. Se o servidor ainda adianta o relógio, o pacote de fusos (tzdata) está desatualizado: rode sudo dnf upgrade tzdata ou sudo apt install --only-upgrade tzdata.
Failed to set time zone: Access denied
Faltou o sudo. Em VPS de contêiner, o fuso pode ser alterado normalmente, mas a hora em si vem do servidor físico.