Como o comando date interage com o timedatectl?

1

Eu tenho dois servidores 16.04. O timedatectl em ambas as máquinas mostra que o horário da rede está ativado e o NTP está sincronizado. Ambos estão usando o UTC. Em seguida, defino a data para um dia aleatório no próximo mês usando o comando date .

No primeiro servidor, invocações subseqüentes de date mostram que a mudança de horário realmente teve efeito. O timedatectl também mostra a nova data. A hora da rede ainda está ativada, mas NTP sincronizado = Não.

No segundo servidor, invocações subseqüentes de date não mostram a nova hora e nem timedatectl . O horário da rede ainda está ativado e o NTP está sincronizado.

Como isso funciona? Como isso deve funcionar?

Em ambas as máquinas, eu fiz um ps -la | grep ntp para ver se alguma outra coisa estava gerenciando o tempo, mas nada apareceu.

A máquina que aceita a nova data e não sincroniza novamente está executando na caixa virtual, mas eu tenho adições de convidado instaladas, então imagino que seria compatível com a sincronização NTP. Não tenho certeza sobre os detalhes da outra máquina - é uma máquina Laravel Forge.

    
por Kim Prince 20.04.2018 / 00:52

2 respostas

0

Você está fazendo muitas perguntas boas, tentarei respondê-las, mas também sugiro que leia este unix.stackexchange q / a on time on linux . Ele deve fornecer informações mais aprofundadas do que apenas as perguntas específicas que você está fazendo.

Algumas informações básicas

timedatectl é um programa para interagir com systemd-timesyncd , que é um cliente NTP leve fornecido por systemd . Execute man timedatectl para obter uma descrição fácil do programa. Por exemplo, Network time on: yes significa apenas que o serviço systemd-timesyncd está ativado. É isso.

Isso também explica por que você não verá ps faux |grep ntp retornar nada.  O cliente ntp interno é chamado de systemd-timesyncd .

date é um programa para consultar e manipular a data e a hora do sistema. Este é o tempo que o seu sistema operacional acha que está certo agora. Se você executou isso com o argumento -s , ele permitirá que você ajuste a hora do seu sistema

Sobre suas máquinas de amostra

machine-1 você disse que é uma máquina que executa o virtualbox. Isso permite que você ajuste o relógio do sistema normalmente (e até mesmo tem um relógio de hardware virtual para você mexer se quiser).

O que você descreve parece normal, você distorceu o relógio por dia e o cliente ntp não sincronizará mais corretamente. É por isso que o comando ntpdate existiu por muito tempo no Ubuntu, é um comando único para alinhar o relógio e entregá-lo a um cliente ntp. systemd-timesyncd agora tem essa funcionalidade embutida, mas só é executada na inicialização, não o tempo todo.

machine-2 você disse que é uma máquina laravel forge . Não tenho certeza do que é especificamente. Se você executar sudo date -s '2018-04-18 12:00:00' , isso permite que você faça isso? O que isso diz? Pode ser que você não tenha a capacidade de alterar o relógio do sistema nesse servidor. Pode ser um contêiner (docker, lxd) de algum tipo, por exemplo.

    
por dpb 20.04.2018 / 07:41
0

No segundo servidor (onde não consegui alterar a data), a emissão de sudo timedatectl set-ntp off corrige o problema. Mais tarde, quando eu quiser sincronizar novamente o tempo, emito sudo timedatectl set-ntp on e dou alguns instantes. Isso faz sentido.

    
por Kim Prince 21.04.2018 / 23:23