Como obtenho a data atual de acordo com um servidor NTP sem defini-lo localmente?

6

Eu quero obter a data e hora atuais de acordo com um servidor NTP remoto, usando o Linux. Eu não quero mudar a hora local como resultado; Eu só quero que a data remota, ajustada para o fuso horário local, seja impressa. A data retornada deve obedecer aos seguintes critérios:

  1. Precisa ser razoavelmente preciso.
  2. Ele precisa ser ajustado para o fuso horário no sistema local que faz a solicitação.
  3. Ele precisa ser formatado de maneira facilmente legível ou interpretável (formato de data padrão ou segundos desde a época).

O que eu tentei:

Eu posso chamar ntpdate -q my.ntp.server e obter o deslocamento entre a hora local e a hora do servidor, mas isso não retorna a data de acordo com o servidor NTP; apenas retorna o offset e a data local.

Existe alguma maneira fácil / comando que eu posso usar para dizer: "Imprima a data de acordo com um determinado servidor NTP, ajustado para o meu fuso horário atual"?

    
por Zac B 04.12.2012 / 16:35

1 resposta

2

Este script Perl deve fazer o que você precisa (assumindo que você não precisa de precisão para os 10 -6 de segundo):

#!/usr/bin/perl -w

use strict;
use Math::Round;

## Get current date (epoch)
my $date=time();

## Get the seconds offset, rounding to the nearest second
my $ntp=nearest(0.1,'ntpdate -q $ARGV[0] | gawk '(\$NF~/sec/){print \$(NF-1)}''); 

## Get the server's time
my $ntp_date=$date+$ntp;

## Convert to human readable and print
print "The time according to server $ARGV[0] is " . localtime($ntp_date) . "\n";

Salve o script como check_ntp.pl e execute-o com o servidor como um argumento:

perl ./check_ntp.pl my.ntp.server
    
por 04.12.2012 / 17:53