Como acertar data e horário no Linux

Existem duas fontes de horário em um computador: o "CMOS clock" da placa mãe, que tem uma bateria e mantém o horário mesmo após o desligamento da máquina, e o "relógio de software" do kernel, que pode ser atualizado constantemente. O relógio do sistema é, assim, configurado a partir do "CMOS clock" durante a inicialização, e o "CMOS clock" é atualizado no desligamento. O horário do "relógio de hardware" pode ser visto através do comando "sudo hwclock --show".

Talvez a opção mais fácil de atualizar data e hora seja através da interface gráfica, clicando no relógio, configurações e seguindo daí em menus bem intuitivos - é necessária a senha de super usuário. Mas existem outras formas através de linha de comando no terminal - muitas vezes a única opção.

O comando "date" mostra a data e o horário atual do sistema em diferentes formas de visualização e até permite cálculos de tempo (veja mais clicando no link). Além disso, também permite acertar a hora do sistema manualmente, utilizando a sintaxe reduzida "date MMDDhhmm" ou date --set="" ou também "-s" no lugar de "--set=", por exemplo:

root@server:~# date 091113282015
Fri Sep 11 13:28:00 UTC 2015
# Outras opções
root@server:~# date --set="11 September 2015 13:28:00"
root@server:~# date -s "13:28:00"
root@server:~# hwclock --hctosys # Pega o horário do hardware

No exemplo, o fuso horário é o UTC (referência mundial). Essa informação está no arquivo "/etc/timezone". Você pode alterar o fuso horário de diferentes formas:

- Executar comando "sudo dpkg-reconfigure tzdata" e escolher uma região conforme a janela de diálogo que aparecerá;

tzdata_ex

- A opção de cima pode ser executada também primeiro reescrevendo o conteúdo do arquivo e executando o comando conforme segue:

$ sudo echo 'America/Sao_Paulo' > /etc/timezone
$ sudo dpkg-reconfigure -f noninteractive tzdata

- Executar o comando "tzselect" e escolher as opções conforme forem aparecendo;

tzselect_ex

- Criar um link para a pasta "/etc/localtime" (por exemplo):

ln -s /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime

- Editar o arquivo "/etc/sysconfig/clock" colocando as seguintes informações: ZONE="America/Sao_Paulo"; UTC=false; ARC=false. Depois, executar os seguintes comandos:

$ sudo rm -f /etc/localtime
$ sudo ln -sf /usr/share/zoneinfo/US/Eastern /etc/localtime
$ sudo date -s "10/15/2005 09:40:00"
$ sudo /sbin/hwclock --systohc # Set the Hardware Clock to the current System Time

- Executar o comando "tzconfig" ou "timeconfig";

O fuso horário de Brasília aparece como BRT quando executar comando "date". Caso não tenha privilégios de root, pode exportar a variável TZ: "export TZ=BRT".

Caso queira que o computador NÃO atualize com o horário de verão, basta escolher uma cidade que seja do mesmo fuso mas que não tenha horário de verão (Recife, por exemplo). O computador acessa um banco de dados interno que contém informações sobre os períodos de horário de verão no mundo todo que é atualizado regularmente de modo automático.

Atualizar horário a partir de servidor

É possível fazer com que o próprio sistema operacional sincronize-se com um servidor NTP (Network Time Protocol) e mantenha a data e hora atualizadas de forma automática. Para sincronizar o relógio, é recomendado utilizar-se o daemon ntpd instalando o pacote "apt-get install ntp" - o pacote "ntpdate" está obsoleto. Uma boa sugestão é substituir o conteúdo do arquivo "/etc/ntp.conf" pelo desse link: NTPd (ntp.conf). Ele basicamente substitui os servidores de hora pelos do Observatório Nacional (segue o link também para verificar a hora certa).

O serviço pode ser parado/iniciado/reiniciado através dos seguintes comandos:

$ sudo service ntp stop/start/restart # SysV
$ sudo systemctl restart/enable ntp

Também é possível consultar os servidores cadastrados no arquivo de configuração do NTP através do comando "ntpq -p".

No Brasil, temos uma boa quantidade de servidores de tempo públicos de qualidade, como os do projeto NTP.br, os do Observatório Nacional (ON), os da RNP e os de algumas universidades. O site deles pode ser incluído modificando o arquivo "/etc/ntp.conf" - o link "pool.ntp.org" é um grupo de máquinas que concordaram em servir como servidores NTP públicos e pode ser limitado para um país específico, como "br.pool.ntp.org" para o Brasil.

Ainda usando o ntpdate, existe esse script que pode ser incluído no crontab para executar de tempos em tempos:

##########################
#!/bin/bash
RETRY_MAX=5
 
retry=1
while [ 1 ] ; do
	echo "Tentativa:$retry"
	ntpdate -u br.pool.ntp.org
	if [ "$?" -ne "1" ]; then
		hwclock -w
		echo "OK"
		exit 0
	fi

	let retry=$retry+1
	if [ "$retry" -gt "$RETRY_MAX" ] ; then
		echo "ERRO: Nao foi possivel ajustar a hora na $RETRY_MAX tentativa."
		echo "Provavelmente sem conexao a internet ou sem DNS server"
		exit 1
	fi
done
 
#################################
Compartilhe o link desse texto, mas se for copiar algum trecho, cite a fonte. Valorize nosso trabalho.
Mais informações na licença de uso do site.

Um Pingback/Trackback