2012-04-05 13 views
6

Ho bisogno di creare un'applicazione che convalida la sincronizzazione dell'ora NTP su ogni macchina. In altre parole, ho bisogno di determinare se ogni macchina è la mia LAN è sincronizzata con un server orario comune (strato). Quindi, ho inventato due modi.come validare la sincronizzazione dell'ora NTP

1) Avere il client NTP su ciascuna macchina genera il file di statistiche. Se seguo questo approccio, quale dei file delle statistiche dovrei esaminare per determinare se l'ora sulla macchina è entro una certa tolleranza del time server? Ci sono peerstats, clockstats e loopstats. Qualcuno di quei file contiene informazioni che posso usare per determinare se l'ora è sincronizzata?

2) Richiama l'argomento della riga di comando ntpq e ne canalizza l'output. Analizza l'output.

In questo momento preferisco l'opzione 1, ma, come ho indicato, non sono sicuro che uno qualsiasi dei file di statistiche NTP contenga informazioni che posso utilizzare per determinare se il tempo è sincronizzato.

C'è un approccio migliore.

Esiste un'API che è possibile utilizzare per interrogare direttamente il client NTP?

Grazie per il vostro aiuto.

risposta

1

Il modo migliore per verificare la sincronizzazione è verificarlo, non guardare un file generato dal daemon di cui si sta verificando il lavoro. È necessario eseguire ntpdate -q o equivalente e verificare che l'offset segnalato sia entro la tolleranza richiesta.

+0

Si noti che su alcuni sistemi (sto usando Debian con un kernel 2.6 su un computer embedded), è necessario specificare il percorso del binario, altrimenti si ottiene uno script di shell che prende 'start | stop | restart | reload | force-reload' invece dell'opzione '-q'. –

0

Ho la stessa domanda. Ho usato una combinazione di due comandi: ntptime [e quindi analizzo l'output per confermare nessuna occorrenza della parola "ERRORE"] ntpq -p [e poi conferma che restituisce uno stato di non errore, nonché almeno un segno "+" per indicare uno stato sincronizzato]

Questo funziona perfettamente sulle mie scatole CentOS, ma sui miei server FreeBSD, restituirà uno stato "OK" anche quando mancano diverse ore di sincronizzazione, a patto che l'ora locale è stabile, ntpd è in esecuzione e i server dell'origine ora restituiscono un orario coerente. Sarei felice di ricevere una risposta migliore. Il suggerimento di utilizzare ntpdate potrebbe funzionare, se riesco a configurare qualcosa per far sì che ntpdate usi il file ntp.conf per ottenere un elenco di server dell'origine del tempo.

5

È possibile eseguire il comando ntpq -c "rv 0 stratum,offset" e analizzare l'output. Se restituito stratum è < 16 quindi offset sarà la differenza di tempo tra il pool ntp e l'orologio di sistema in millisecondi.

C'è anche una libreria libntpq in fase di sviluppo. È nelle prime beta, ma se hai bisogno di qualcosa di abbastanza dovrebbe essere utilizzabile.

Aggiornamento 2016/10/07: Sembra libntpq progetto è da tempo defunta, ma una biblioteca con nome identico è incluso con ntp fonte. Sembra utilizzabile ma molto probabilmente dovrà essere collegato staticamente. Uno dovrebbe essere in grado di tollerare GPL per poterlo utilizzare in questo modo.

0

Penso che entrambi produrranno buoni risultati, l'unica differenza se si vuole veramente monitorare il tempo per ogni pochi minuti, poi passare alla seconda opzione ... ntpq ha varie opzioni per monitorare l'intero processo di sincronizzazione Ntp ... ntpq> pe ti darà lo stato di tutti i tuoi peers configurati, ntpq> come fornirà tutti i dettagli aggiuntivi su ogni singolo peer e ntpq> rv darà la sinossi completa di ogni peer ... Ci sono altri comandi interni per eseguire il debug del tuo processo ntp attraverso ntpq.Vale la pena passare alla seguente pagina se avete bisogno di ulteriori chiarimenti: http://doc.ntp.org/4.1.1/ntpq.htm

Per la prima opzione, è un rapporto di statistiche che è possibile lasciare sul proprio ntp per continuare a generare e aggiornare come accennato nel file ntp.conf ovvero se si desidera che venga generato al giorno o alla settimana, ecc ...

Loopstats vi mostrerà la data, l'ora, frequenza di offset & tempo, jitter, orologio in tempo costante disciplina ecc Peerstats vi informa su tutti i vostri coetanei dove le attuali e configurate clockstats informeranno sullo stato del driver dell'orologio

Oltre a queste ci sono anche le opzioni rawstats e sysstats disponibili, Inoltre puoi controllare i tuoi syslog e reindirli ai tuoi log Ntp attraverso il file ntp.conf

puoi passare attraverso la sezione di monitoraggio nel link sopra menzionato e può imparare in più dettagli su come configurare ntpstats

Spero che questo possa aiutarti un po !!

0

Se tutto ciò che serve è determinare se la macchina è sincronizzata o meno, è possibile utilizzare ntpstat.

SYNOPSIS 
    ntpstat 

DESCRIPTION 
    ntpstat will report the synchronisation state of the NTP daemon 
    running on the local machine. If the local system is found to be 
    synchronised to a reference time source, ntpstat will report the 
    approximate time accuracy. 

RETURNS 
    ntpstat returns 0 if clock is synchronised. 
    ntpstat returns 1 if clock is not synchronised. 
    ntpstat returns 2 if clock state is indeterminant, 
    for example if ntpd is not contactable. 
+0

Stavo cercando di usarlo su Ubuntu 16.04. Ma riporta sempre 0, anche dopo più di 10 minuti dopo che il cavo di rete è stato scollegato e anche se la lista restituita da 'ntpq -pn' era vuota. Non ho ancora studiato se si tratta di un bug o se avrei dovuto aspettare ancora di più ... – Huygens

Problemi correlati