Ambiente de configuração
Este artigo foi elaborado utilizando a distribuição Slackware em sua versão 15.0. Muitas distribuições Linux modernas empregam o comando timedatectl para configurações de data, hora e fuso horário; no entanto, esse comando não será abordado neste documento. O Slackware utiliza comandos mais tradicionais, que devem funcionar corretamente na maioria das distribuições Linux atuais.
Introdução
O fuso horário do Linux é definido através do arquivo /etc/localtime, mas é possível configurá-lo tanto globalmente quanto para um usuário específico usando a variável de ambiente TZ. Para usuários individuais ela pode ser definida no arquivo ~/.bashrc, enquanto para o sistema inteiro, ela pode ser configurada em /etc/profile ou, em algumas distribuições, em /etc/environment.
O comando date é utilizado para exibir ou configurar manualmente a data e hora no Linux, enquanto o comando ntpdate utiliza o protocolo NTP para realizar uma sincronização pontual do horário com outros computadores na rede através da porta 123/UDP. Já o daemon ntpd é responsável por manter a sincronização contínua do relógio do sistema com servidores NTP.
UTC vs Localtime
UTC é o horário padrão global, não considera fuso horário ou horário de verão, a mesma hora UTC é utilizada em qualquer local do mundo. Localtime é o fuso horário específico da localização onde o sistema esta sendo configurado.
Fuso horário
O fuso horário no Linux é definido utilizando o banco de dados de fuso horário disponibilizado e mantido pela IANA. No Slackware o pacote que contém essa lista é o glibc-zoneinfo e as informações das zonas são organizadas no diretório /usr/share/zoneinfo/ por regiões (como "America", Europe", "Asia").
$ bash
ls /usr/share/zoneinfo/
Dentro das pastas das regiões estão os arquivos de zona com o nome de cidades (como "Sao_Paulo", "Buenos_Aires", "Los_Angeles"). Para visualizar um fuso horário específico use o comando:
$ bash
zdump /usr/share/zoneinfo/America/Los_Angeles
Para mudar o fuso horário:
# bash
ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
Opcionalmente pode ser utilizado o comando timeconfig no Slackware para criar a configuração acima. Escolha a opção "NO" e depois encontre a sua localidade na lista disponibilizada. Lembre-se de executar o comando com o usuário root.
Teste com o comando date se o novo fuso foi aplicado. Caso a alteração não funcione, pode ser que o fuso horário esteja sendo definido pela variável de ambiente TZ. A variável tem prioridade para que seja possível definir fusos diferentes por usuário. Para manipular a variável em tempo de execução use:
# bash
# Verifica o valor de TZ echo $TZ America/Sao_Paulo # Remove o valor de TZ unset TZ # Altera o valor de TZ export TZ=America/Los_Angeles
Para manter a alteração permanente, a variável TZ deve ser configurada em ~/.bashrc. Adicione a linha:
~/.bashrc
export TZ=America/Sao_Paulo
Esta configuração é individual para o usuário. Para recarregar o arquivo .bashrc com as alterações realizadas:
$ bash
. ~/.bashrc
# ou
source ~/.bashrc
Já para usar a variável em nível de sistema ela pode ser configurada em /etc/profile, usando a mesma linha do arquivo .bashrc. Ou ainda em /etc/environment, porém neste arquivo não deve-se incluir o comando export.
/etc/environment
TZ=America/Sao_Paulo
Tanto /etc/profile quanto /etc/environment podem ser recarregados usando o mesmo método do arquivo .bashrc, ou então no próximo login do usuário.
Veja também:
Ajustando o relógio manualmente
Usando o comando date para consultar e alterar a data, a hora e o fuso horário. Lembre-se de utilizar o usuário root para alterar o horário.
# bash
# Consultando a data, hora e fuso date Tue Oct 1 09:16:27 -03 2024 # Alterando - ano/mês/dia hora:minuto:segundos date --set "2024/10/01 09:20:00" Tue Oct 1 09:20:00 -03 2024
Na consulta da data a informação -03 faz referência ao horário relativo ao UTC, ou seja, três horas a menos.
Sincronizando o relógio com um servidor NTP remoto
Para atualizar o horário através de um servidor na internet é preciso ter o pacote ntp, a distribuição slackware disponibiliza a instalação através do comando slackpkg.
# bash
# Sincronizando o horário ntpdate pool.ntp.org 5 May 00:41:05 ntpdate[3132]: step time server 201.49.148.135 offset 6.872209 sec # Usando um servidor no Brasil ntpdate br.pool.ntp.org 5 May 00:50:04 ntpdate[3921]: adjust time server 201.49.148.135 offset -0.002182 sec
Na maioria dos casos é recomendado utilizar pool.ntp.org para encontrar um servidor NTP (ou 0.pool.ntp.org, 1.pool.ntp.org, etc., caso você precise de múltiplos servidores). O sistema tentará automaticamente selecionar os servidores mais próximos de você.
Ao executar o comando ntpdate, o horário será atualizado no momento da execução do comando. Para manter o relógio sincronizado, utilize o serviço ntpd. Para isso, primeiro edite o arquivo de configuração /etc/ntp.conf e remova os comentários das linhas conforme abaixo:
/etc/ntp.conf
# Servidores NTP, liste um ou mais para fazer a sincronização
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
Depois, conceda permissão de execução ao script /etc/rc.d/rc.ntpd e inicie o serviço com os comandos abaixo:
# bash
# Conceda permissão de execução chmod +x /etc/rc.d/rc.ntpd # Inicie o serviço /etc/rc.d/rc.ntpd start
Para realizar um teste, altere a data manualmente utilizando o comando date, conforme demonstrado anteriormente. Note que o horário não será corrigido imediatamente, existe um intervalo de checagem padrão que varia entre 64 segundos (mínimo) e 1024 segundos (máximo).
Esses valores podem ser ajustados configurando os parâmetros maxpoll e minpoll. Para mais informações consulte o manual: man ntp.conf.
Após alterar a data, aguarde pelo menos 17 minutos (1024 segundos) para que o horário seja corrigido automaticamente. Alternativamente, você pode reiniciar o serviço manualmente para forçar a correção imediata, utilizando o comando abaixo:
# bash
# Reiniciando o serviço
/etc/rc.d/rc.ntpd restart
Relógio do hardware
O relógio do hardware é um dispositivo eletrônico que mede a passagem do tempo, também conhecido como RTC. É o horário exibido na BIOS ou UEFI dos computadores.
Para evitar inconsistências em sistemas de inicialização múltipla (dual boot) com diferentes instalações Linux no mesmo computador, é necessário configurar o relógio do hardware corretamente, definindo a utilização do horário local (localtime) ou baseado no UTC.
Este procedimento deve ser realizado apenas uma vez para garantir que o fuso horário seja configurado corretamente. Abaixo será demonstrado como consultar o relógio do hardware e como definir o fuso horário.
# bash
# Consultando o horário do hardware
hwclock --show
# bash
# Define o fuso horário como local hwclock --systohc --localtime # ou hwclock -w -l
# bash
# Define o horário baseado no UTC hwclock --systohc --utc # ou hwclock -w -u
Referências
Para elaboração deste artigo a principal fonte foi o manual (man page) disponível no Slackware Linux.