29 de abr de 2010

Relógio atrasa com o passar do tempo no Debian - Resolvido

Bug chato que me incomoda desde o Ubuntu 9.10 "Karmic Koala": a hora do sistema atrasa!

Explicando melhor (executando os comandos hwclock e date no Debian "squeeze", em diferentes horários):
sudo hwclock && date
Qui 29 Abr 2010 10:00:52 BRT -0.854332 segundos
Qui Abr 29 10:00:35 BRT 2010

sudo hwclock && date
Qui 29 Abr 2010 10:20:02 BRT -0.875466 segundos
Qui Abr 29 10:19:16 BRT 2010

sudo hwclock && date
Qui 29 Abr 2010 11:34:30 BRT -0.811600 segundos
Qui Abr 29 11:32:53 BRT 2010

O que aconteceu: o comando hwclock exibiu, entre outras informações, a hora da BIOS (relógio do hardware), enquanto o comando date mostrou, juntamente com outros dados, a hora do sistema. Reparem como a hora do sistema foi atrasando com o passar do tempo. E como o relógio do GNOME exibe a hora do sistema...

Bug do Linux? Parece que sim! Pelo menos aqui no meu Notebook... (isso não ocorre no meu PC).

Pesquisa daqui, pesquisa dali... e eis que surge uma solução (testada no Debian "squeeze", mas que pode ser utilizada em derivados como o Ubuntu):

1 - Como root, execute:
# gedit

2 - Copie e cole o texto abaixo no gedit:
#!/bin/sh
while (true) do
hwclock --hctosys
sleep 30
done

Nota: o script acima irá definir, a cada 30 segundos, a hora do sistema a partir do relógio do hardware.

3 - Salve com o nome sinc_relogio.sh e feche o arquivo;

4 - A seguir, damos permissão de execução para o arquivo e o movemos para o diretório /usr/bin/. Execute (como root):
# chmod +x sinc_relogio.sh
# mv sinc_relogio.sh /usr/bin/sinc_relogio.sh

5 - E depois:
# gedit /etc/rc.local

6 - No arquivo aberto, cole a seguinte linha antes do texto "exit 0" (isto irá fazer com que o script seja executado quando o sistema for iniciado):
./usr/bin/sinc_relogio.sh

Por exemplo:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

./usr/bin/sinc_relogio.sh

exit 0

7 - Salve e feche o arquivo;

8 - Reinicie o sistema.

Pronto! Esperamos que isto resolva contorne o problema.

Leia também:

1 comentários

giofilth disse...

Funciona no Arch!? =P

Estou tendo o mesmo problema por aqui! hehehe

Mas no ubuntu nunca aconteceu...

:S