Come personalizzare la frequenza di polling NTP?

17

Sto configurando Ubuntu su una macchina embedded che gira su una connessione cellulare, dove paghiamo per byte. La macchina inoltre non ha batteria RTC, quindi inizia da un momento casuale ad ogni avvio.

Mi piacerebbe assicurarmi che l'ora venga sincronizzata quando la connessione cellulare è disponibile, in modo che i messaggi di log, ecc. abbiano tempi reali, ma non voglio nemmeno pagare un braccio e una gamba per il traffico NTP.

Posso personalizzare la velocità con cui NTP aggiorna l'ora? Al momento sto usando openntpd, ma non sono sposato.

Internet non è necessariamente all'avvio, quindi ntupdate e correlati all'avvio non funzioneranno. Programmare tramite cron significa attendere l'esecuzione dell'attività pianificata, mentre voglio un daemon time per ottenere una sincronizzazione temporale al più presto.

    
posta David Pfeffer 16.05.2012 - 00:57

8 risposte

5

Alcune di queste risposte potrebbero vincere il contest di configurazione ntp offuscato.

Usa l'implementazione di riferimento ntp e usa iburst per impostare rapidamente il tempo all'avvio. Successivamente è possibile utilizzare la direttiva minpoll per limitare la frequenza con cui ntpd interroga i server remoti. Ciò ti consentirà di sfruttare l'orologio di ntpd per disciplinare e mantenere bassa la larghezza di banda.

minpoll minpoll
maxpoll maxpoll
    These options specify the minimum and maximum poll intervals for NTP 
    messages, in seconds as a power of two. The maximum poll interval 
    defaults to 10 (1024 s), but can be increased by the maxpoll option to 
    an upper limit of 17 (36 h). The minimum poll interval defaults to 6 (64 s), 
    but can be decreased by the minpoll option to a lower limit of 3 (8 s).

Chrony è una buona alternativa all'implementazione di riferimento di ntp. Openntpd non lo è.

    
risposta data dfc 18.01.2014 - 01:02
7

La mia esperienza è con ntp piuttosto che openntpd.

Dovresti sapere che il protocollo NTP di solito inizia con l'invio di pacchetti ogni minuto (64 secondi), ma di solito si stabilisce inserendo e ricevendo un pacchetto ogni 17 minuti per ogni server che hai nel tuo file /etc/ntp.conf. Tuttavia, le interruzioni di rete o un orologio instabile nel dispositivo potrebbero aumentare. Ogni pacchetto ha un carico utile di circa 68 byte, quindi probabilmente è un po 'più di 100 byte, a tratta, per sondaggio.

Il rdate e ntpdate al momento dell'upgrade della rete sono buone idee per impostare il tempo. E se questo è tutto ciò che serve dovrebbe funzionare bene per te.

Se è necessario mantenere l'ora in sincronia per un periodo di tempo prolungato, tuttavia, il protocollo ntp è stato progettato per farlo. L'orologio del tuo dispositivo funzionerà un po 'veloce o lento a seconda di come si riscalda o si raffredda, anche se probabilmente ha un orologio controllato da un cristallo - e il cronometraggio in corso ha lo scopo di regolarlo.

Ecco alcuni suggerimenti se è necessario un cronometraggio continuo e si desidera ridurre la larghezza di banda utilizzata. Si riferiscono ad elementi in ntp.conf.

Non usare iburst. (Ma ci vorrà più tempo per impostare l'ora inizialmente).

Aumenta la minipoll verso l'alto da 6 (2 ^ 6 secondi è di 64 secondi). Questo riduce il traffico quando il protocollo si avvia dopo che la rete è arrivata.

Aumenta maxpoll da 10 (2 ^ 10 secondi è 1024 secondi o circa ogni 17 minuti. Puoi andare fino a 17 a sondare circa ogni 36 ore. Non l'ho provato io stesso.

Usa solo un numero minimo di server, se ce n'eri uno che può essere raggiunto in modo affidabile dai tuoi dispositivi embedded, sarebbe stato grandioso. Maggiore è il numero di server, maggiore è la precisione del cronometraggio, ma il traffico si ridimensiona, quindi è un compromesso.

    
risposta data John S Gruber 16.05.2012 - 18:05
4

Potresti fare alcuni hackery che implicano l'esecuzione di ntpdate quando viene visualizzata l'interfaccia della cella. Ma se è possibile, l'installazione di chrony sarebbe un'alternativa migliore, poiché è stato creato con l'accesso alla rete intermittente in mente .

    
risposta data tm23 16.05.2012 - 03:13
3

In un'installazione predefinita di Ubuntu, il daemon NTP non viene eseguito. Invece, il tempo viene impostato ogni volta che un'interfaccia di rete viene richiamata dal gancio /etc/network/if-up.d/ntpdate .

Se stai cercando la sincronizzazione una tantum piuttosto che la sincronizzazione costante, questo potrebbe essere sufficiente per te.

Puoi controllare quali server vengono interrogati per impostare l'ora tramite il file standard /etc/ntp.conf o tramite la variabile NTPSERVERS in /etc/default/ntpdate .

    
risposta data James Henstridge 16.05.2012 - 05:20
2

Hai bisogno della sincronizzazione esatta e precisa fornita da ntp? In caso contrario, potresti riuscire a utilizzare rdate o ntpdate all'avvio e poi periodicamente tramite cron.

    
risposta data Pridkett 16.05.2012 - 01:48
2

Probabilmente hai già letto la pagina man di openntpd.

link

Probabilmente hai già notato la mancanza di un'opzione di polling per il tempo.

Ho questi possibili hack da proporre:

  1. Non usare ntpd, basta chiamare ntpdate tramite cron
  2. Usa cron e / o gli script di connessione cellulare per attivare o disattivare le regole di iptables per consentire o disabilitare il traffico sulla porta 123 quando vuoi consentirlo. Questo potrebbe essere semplice come

    0 12 * * * iptables -D OUTPUT -j DROP -p udp --dport 123 # at noon start allowing ntp

    0 13 * * * iptables -A OUTPUT -j DROP -p udp --dport 123 # at 1pm stop allowing ntp

  3. Incorpora un ricevitore orologio radio nella macchina incorporata. Non conosco quasi nulla di questo, ma prodotti come questo:

    • link e questo

    • link e le persone parlano in questo modo

    • link

fammi pensare che non è difficile se puoi ricevere il segnale radio.

    
risposta data Jay _silly_evarlast_ Wren 16.05.2012 - 01:25
1

Se ricordo correttamente, l'intervallo di polling ntp può essere impostato su un massimo di 1024 secondi. Forse la soluzione più semplice sarebbe quella di eseguire ntpdate ad ogni avvio e successivamente ogni tanto da crontab.

Se il tuo orologio inizia con un tempo casuale ad ogni avvio, probabilmente non sarai in grado di eseguire ntpd e dovrai prima usare ntpdate. Ntpd si rifiuta di sincronizzare il tempo se la differenza è troppo grande tra l'orologio e l'orologio del server.

    
risposta data BigWhale 16.05.2012 - 01:19
1

NTP, come TCP, ha alcune teorie profonde e esperienze pratiche integrate nel protocollo; se si modificano i suoi parametri fondamentali, smette di avere le proprietà di sincronizzazione per cui è stato progettato.

Se il tuo dispositivo è collegato sporadicamente, forse il buon vecchio RDATE ti servirà al meglio. Non gestisce il clock-slewing, né la media peer, né può essere protetto contro vari hack sottili che un uomo nel mezzo potrebbe giocare se ne valeva la pena. Ottiene solo una data di riferimento da un server remoto e colpisce l'orologio locale con un martello. Ma lo fa quando lo vuoi e il suo comportamento è deterministico.

L'accuratezza RDATE è di gran lunga peggiore di NTP, non mi fiderei per un tempo migliore di ± 1 secondo, ma se vieni collegato solo sporadicamente, la tempistica più accurata non è rilevante; infatti, secondo relatività potrebbe non essere nemmeno significativo.

    
risposta data msw 16.05.2012 - 13:53

Leggi altre domande sui tag