Como configurar o Ubuntu para sincronizar meu relógio com um servidor de horário?

23

Gostaria que o Ubuntu sincronizasse automaticamente o relógio do sistema com um servidor de horas na inicialização.

No entanto, meu PC não está conectado à Internet até que eu faça o login (mais de 5 a 10 segundos para uma boa medida).

Como posso configurá-lo para fazer isso?

Nathan Osman
fonte
2
Já existem excelentes respostas aqui que explicam como instalar o ntpd para que seu computador se mantenha sincronizado continuamente com os servidores de horário da Internet, mas eu só queria acrescentar que, por padrão, o Ubuntu sincronizará o tempo com o ntp.ubuntu.com sempre que a interface de rede chegar "up" (por exemplo, quando você inicia o computador). Isso não parece estar acontecendo no seu caso devido à maneira como você se conecta à Internet, mas outros leitores não devem assumir que o Ubuntu não sincroniza o tempo sem a instalação do ntpd.
Aqui está um que explica como configurá-lo para time.nist.gov: askubuntu.com/questions/972799/...
SDsolar

Respostas:

32

Isso é feito com o NTP, para o qual estão disponíveis instruções . Basicamente, você precisará instalar um daemon NTP. Parece haver várias opções disponíveis, mas a "padrão" está no pacote ntp. De acordo com as instruções na página vinculada,

sudo apt-get install ntp

terá tudo configurado para sincronizar com o servidor NTP do Ubuntu.

EDIT : Eu perdi "na inicialização". Geralmente, é recomendável usar o ntpd para obter sincronização contínua entre o sistema e o servidor, mas se você realmente deseja sincronizar apenas uma vez, a resposta do mfisch parece ser o que você está procurando.

David Z
fonte
3
Eu acho que, em geral, ele estaria melhor apenas tendo o ntpd sempre em execução e apenas deixando de conectar quando ele não estava online, o que não é de forma alguma prejudicial. Com isso dito, o meu método também deve trabalhar;)
mfisch
Eu estou bem com isso funcionando continuamente.
Nathan Osman
1
George, faça isso. Eu esperava responder à sua pergunta "real", já que a coisa mais irritante do mundo é fazer uma pergunta como essa e ter todas as respostas como "por que você quer fazer isso?"
Mfisch 29/07
Para o Ubuntu 18.04, o conselho para instalar o ntpd se aplica por mais tempo. Por padrão, systemd-timesyncd.service sincroniza a hora.
ernstkl 21/03
9

Se você for em "Sistema-> Administração-> Hora e Data", receberá uma GUI para definir a data / hora.

Uma opção é fornecida para o uso de servidores de horário. Se você o verificar e o NTP não estiver instalado, ele perguntará se você deseja instalá-lo. Basta clicar em "sim" e deixar que ele faça seu trabalho :)

Little Jawa
fonte
Esqueceu a coisa "inicialização". O NTP faz seu trabalho regularmente, o que significa que você deve ser sincronizado sempre que estiver on-line ... Mas a única maneira de garantir é usar algum tipo de script, conforme fornecido pelo mfisch. Agora, para ser sincero: uma vez sincronizado, há poucas chances de o seu computador ficar estragado. Portanto, se você usar a sincronização de horário padrão e deixá-lo em segundo plano, convém passar a maior parte do tempo, sem precisar fazer mais nada.
Little Jawa 29/07
Não está rotulado como "Hora e Data"?
Firefeather
@ Featherefeather: pode muito bem ser. Eu não tenho uma interface Inglês, então eu não posso dizer;)
Pouco Jawa
Ah, bobo eu, esquecendo a internacionalização. Meu sistema en-us classifica como "Hora e Data".
Firefeather
6

Você pode fazer isso usando at e ntpdate . at provavelmente já está instalado, mas o ntpdate pode não estar. (apt-get install ntpdate).

Primeiro, crie um pequeno script que execute ntpdate, vamos chamá-lo de update_time.sh.

#!/bin/bash
ntpdate pool.ntp.org

No seu arquivo .bash_login (que pode ser necessário para criar), adicione isto:

at -f ~/update_time.sh now + 1 minute

Isso deve fazer o que você quer. Você pode alterar o atraso que em usos para ser 5 minutos, 10 minutos etc.

Edição: Acabei de perceber que você precisará ser root para executar ntpdate. Você precisará definir o bit SUID no script update_time.sh que eu mencionei. Você pode fazer isso executando isso a partir do comando (só precisa ser executado uma vez):

sudo chmod 4711 update_time.sh
sudo chown root update_time.sh
mfisch
fonte
1
iirc Você não pode definir suid nos scripts .sh.
Broam 29/07/10
Você pode fazer o suid no ntpdate diretamente então? Provavelmente isso faria a mesma coisa.
Mfisch 29/07
2
Por que usar at? E se você for executar automaticamente ntpdate, por que não instalar o ntpserviço?
Reinier Pós
1
nota: o ntpdate não é mais instalado por padrão no Ubuntu (16.04+) e foi preterido em favor do timedatectl. timedatectl controla o serviço timesyncd do systemd, que é usado por padrão para sincronização de horário.
Corey Goldberg
0

Desde o Ubuntu 16.04, o timedatectl / timesyncd (que faz parte do systemd) substitui a maior parte do ntpdate / ntp. Consulte Sincronização de tempo .

Pode ser necessário ativar a sincronização de horário usando:

$ sudo timedatectl set-ntp on

Se você deseja usar o chrony:

  • Se você precisar de uma sincronização de uma só vez, use: $ chronyd -q

  • Se você precisar de uma verificação de hora única, sem definir a hora, use: $ chronyd -Q

  • Para sincronização contínua, a solução recomendada é crony:

crônico (d)

O daemon NTP chronyd calcula a deriva e o deslocamento do relógio do sistema e o ajusta continuamente, para que não haja grandes correções que possam levar a logs inconsistentes, por exemplo. O custo é um pouco de poder de processamento e memória, mas para um servidor moderno isso geralmente é insignificante. Instalação

Para instalar o chrony, em um prompt do terminal, digite:

$ sudo apt install chrony

Você também pode precisar ativar

sudo timedatectl set-ntp em

Atualização: Outro método, se o acima não funcionar, é definir um cron para executar$ chronyd -q

JBaczuk
fonte