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” e atualizado através do seguinte comando: sudo hwclock –set –date=”9/22/19 18:55:10″ (formato MM/DD/YYYY).
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á;
– 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;
– 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 #################################