Domanda Come forzare un aggiornamento dell'orologio usando ntp?


Sto usando Ubuntu su un sistema embedded basato su ARM che manca di un RTC con batteria tampone. Il tempo di attivazione è da qualche parte nel 1970. Pertanto, utilizzo il servizio NTP per aggiornare l'ora all'ora corrente.

Ho aggiunto la seguente riga a /etc/rc.local file:

sudo ntpdate -s time.nist.gov

Tuttavia, dopo l'avvio, sono necessari ancora un paio di minuti fino all'aggiornamento dell'ora, periodo durante il quale non riesco a lavorare efficacemente tar e make.

Come posso forzare un aggiornamento dell'orologio in un dato momento?


AGGIORNAMENTO 1: Quanto segue (grazie a Eric e Stephan) funziona bene dalla riga di comando, ma non riesce ad aggiornare l'orologio quando viene inserito /etc/rc.local:

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; date
Thu Jan  1 00:00:58 UTC 1970
 * Stopping NTP server ntpd     [ OK ] 
 * Starting NTP server          [ OK ] 
Thu Feb 14 18:52:21 UTC 2013

Che cosa sto facendo di sbagliato?


AGGIORNAMENTO 2: Ho provato a seguire i pochi suggerimenti che sono venuti in risposta al primo aggiornamento, ma nulla sembra effettivamente fare il lavoro come richiesto. Ecco cosa ho provato:

  1. Sostituisci il server in us.pool.ntp.org
  2. Utilizzare percorsi espliciti per i programmi
  3. Rimuovi il ntp servizio del tutto e lasciare solo sudo ntpdate ... in rc.local
  4. Rimuovi il sudo dal comando sopra in rc.local

Usando quanto sopra, la macchina inizia ancora dal 1970. Tuttavia, quando si esegue questa operazione dalla riga di comando dopo aver effettuato l'accesso (tramite ssh), l'orologio viene aggiornato non appena invoco ntpdate.

L'ultima cosa che ho fatto è stata rimuoverlo rc.local e effettuare una chiamata a ntpdate nel mio .bashrc file. Ciò aggiorna l'orologio come previsto e ottengo l'ora corrente vera una volta che il prompt dei comandi è disponibile.

però, questo significa che se la macchina è accesa e nessun utente ha effettuato l'accesso, il tempo non ottiene mai gli aggiornamenti. Posso, naturalmente, reinstallare il ntp servizio così almeno l'orologio viene aggiornato entro pochi minuti dall'avvio, ma poi torniamo al punto 1.

Quindi, c'è una ragione per cui posizionare il ntpdate comando in rc.local non esegue il compito richiesto, mentre lo fa in .bashrc funziona bene?


324
2018-02-13 21:58


origine


da [qui] [1]: ntpdate -s ntp.ubuntu.com     [1]: askubuntu.com/a/81301/130162 - 18446744073709551615
nota il flag '-b' su ntpdate. Dalla pagina man di ntpdate: "Forza il tempo per essere calpestato usando la chiamata di sistema settimeofday (), piuttosto che slewed (default) usando la chiamata di sistema adjtime (). Questa opzione dovrebbe essere usata quando viene richiamata da un file di avvio al momento dell'avvio." Molte delle risposte qui sotto non lo includono, e forse parte del problema nel far funzionare le cose. Si consideri che il flag '-B' indica che gli offset superiori a 128 ms possono richiedere ore per la sincronizzazione usando il meccanismo 'slew' predefinito - Matt S.
Non c'è bisogno di usare sudo nei file /etc/rc.locale .. sono già eseguiti come root. - Soren A


risposte:


Probabilmente il ntp il servizio è in esecuzione, ecco perché ntpdate impossibile aprire il socket (porta 123 UDP) e connettersi al server ntp.

Prova dalla riga di comando:

sudo service ntp stop
sudo ntpdate -s time.nist.gov
sudo service ntp start

Se vuoi metterlo dentro /etc/rc.local utilizza il seguente:

( /etc/init.d/ntp stop
until ping -nq -c3 8.8.8.8; do
   echo "Waiting for network..."
done
ntpdate -s time.nist.gov
/etc/init.d/ntp start )&

284
2018-02-13 23:13



Grazie. Puoi spiegare perché hai bisogno dei percorsi espliciti? - ysap
Non lo so davvero. :-) Ho avuto problemi una volta cercando di correre service da rc.local e cron ma sono riuscito a correggerlo usando /etc/init.d/xxx. In realtà penso che non devi dare il percorso completo a ntpdate, Mi piace usare i percorsi completi negli script solo per essere sicuro che il file giusto sarà trovato. - Eric Carvalho
OK, questo era apparentemente il problema. Ora l'orologio viene aggiornato non appena viene stabilita la connessione di rete. Grazie. - ysap
Ho scoperto che il us.pool.ntp.org è più reattivo. - ysap
Con il -u opzione, non è necessario interrompere il servizio ntp: sudo ntpdate -u time.nist.gov - Edward Anderson


Invece di ntpdate (che è deprecato), uso

sudo service ntp stop
sudo ntpd -gq
sudo service ntp start

Il -gq dice al demone ntp di correggere l'ora indipendentemente dall'offset (g) e uscire immediatamente (q) dopo aver impostato l'ora.


427
2018-02-14 12:32



Grazie. Mostra ancora 1970 dopo questo comando (w / sudo). Lettura ntpd manpage, non sono sicuro di come questo impone un aggiornamento? - ysap
L'opzione "-q" indica all'avvio del daemon NTP, imposta l'ora e immediatamente esce. L'opzione "-g" consente di correggere le differenze di tempo superiori a 1000 sec. A lungo termine, è sufficiente configurare il daemon NTP in modo che sia sempre in esecuzione. - tgharold
Questa risposta dovrebbe andare in alto, perché è corretta: ntpdate è deprecato e installarlo è una cattiva idea, perché è in conflitto con ntp. Se l'orologio è lontano, devi fare questo passaggio manuale perché altrimenti ntp non cambierà il tuo orologio e non ti dirà perché. - Liam
Per me, sudo ntpd -gq non esce! Sono in 14.10 e devo continuare a CTRL + C per continuare ... o quanto tempo è necessario per prendere? - Yanick Rochon
Cordiali saluti, sul mio sistema (CentOS 6.6), avevo bisogno di cambiare le due istanze di sudo service ntp... a sudo service ntpd.... - rinogo


Usa sntp per impostare l'ora immediatamente. Per esempio:

sudo sntp -s 24.56.178.140

I numeri dopo -s possono essere qualsiasi time server ntp, quello è NIST in Ft. Collins, Colorado.


49
2017-11-08 01:00



Ha funzionato! +1 - CappY
Questo ha funzionato quando "sudo ntpd -gq" non ha funzionato. - Matt White
Non so quante volte sono venuto a cercare questa risposta. Funziona sempre. - Chaos
incapace di localizzare il pacchetto sntp? - temple
apt-get install sntp / yum install sntp (sì, funziona anche su CentOS, RedHat, fedore) - ndemou


Come altri hanno sottolineato, la soluzione migliore è istruire ntpd a ignorare la soglia di panico, che per impostazione predefinita è 1000 secondi. È possibile configurare la soglia di panico in due modi:

  • modificare /etc/default/ntp e assicurarsi che l'opzione -g sia presente.
  • modifica /etc/ntp.conf e posiziona tinker panic 0 in cima

Finora questo è essenzialmente ciò che altri hanno raccomandato, ma c'è un altro passo che penso che dovresti prendere. Installa il programma fake-hwclock:

# apt-get install fake-hwclock


fake-hwclock: Save/restore system clock on machines without working RTC hardware

 Some machines don't have a working realtime clock (RTC) unit, or no
 driver for the hardware that does exist. fake-hwclock is a simple set
 of scripts to save the kernel's current clock periodically (including
 at shutdown) and restore it at boot so that the system clock keeps at
 least close to realtime. This will stop some of the problems that may
 be caused by a system believing it has travelled in time back to
 1970, such as needing to perform filesystem checks at every boot.

 On top of this, use of NTP is still recommended to deal with the fake
 clock "drifting" while the hardware is halted or rebooting.

Con finto-hwclock installato, la tua macchina non verrà avviata pensando che sia il 1970 tutto da capo. Quando la macchina si avvia, imposta l'orologio sul timestamp che fake-hwclock ha scritto durante l'ultimo riavvio / spegnimento. Ciò significa che puoi avere un orologio alquanto corretto nel caso in cui ci siano problemi di rete all'avvio.


37
2018-04-03 22:11



-g sembrava non fare nulla per me (alla linea di comando, non ho /etc/default/ntp), ma aggiungendo tinker panic 0 a ntp.conf lavorato - Dave Cousineau
@Sahuagin Non so cosa dirti se non hai un pacchetto ntp non standard. / etc / default / ntp è parte del pacchetto da Ubuntu: packages.ubuntu.com/xenial/amd64/ntp/filelist e -g è stata un'opzione per tutto il tempo che posso ricordare. - dfc
scusate, immagino di non essere su Ubuntu e avrei dovuto pensarci un po 'prima di commentare. tinker panic 0 sicuramente sembra aver funzionato comunque. - Dave Cousineau


ntpdate è un programma diverso dalla net dameon. NTPDate probabilmente sta andando in errore all'avvio perché ntpd è in esecuzione su quel socket.

Dalla riga di comando, corri

# sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start

Si potrebbe anche disinstallare ntpd tutti insieme (apt-get remove ntp) e aggiungere uno script cron per usare ntpdate ogni ora circa.

AGGIORNARE

il servizio ntp probabilmente non avrà un valore significativo per te su questo sistema, quindi rimuovilo prima.

# sudo apt-get remove ntp

Ora aggiungi il comando:

ntpdate -sb time.nist.gov

a /etc/rclocal 

Reboot. Dovrebbe essere buono a quel punto.


12
2018-02-13 23:07



risposta aggiornata. - Stephan
Non è stato disattivato ntpdate o qualcosa del genere? Inoltre, se ho capito bene, il servizio esegue e mantiene la sincronizzazione dell'orologio locale sull'orologio del server, quindi la deriva è vincolata. Se rimuovi ntp ed esegui ntpdate una sola volta, non sarà influenzato dall'orologio alla deriva quando la macchina è accesa per lunghi periodi? - ysap
Stephan, per favore vedi l'aggiornamento n. 2 alla domanda. - ysap
Sì, ntpdate è in fase di eliminazione. L'uso di "ntpd -q" è preferito (entrambe le varianti richiedono che ntpd sia fermato prima). - tgharold


rdate -s tick.greyware.com

se tutto quello che vuoi fare è impostare l'orologio una volta, semplice


8
2018-02-26 22:57



Grazie. Al momento non ho il sistema per controllare questo comando, ma se segui la discussione nella domanda e la risposta accettata, vedrai che il problema era in realtà la non disponibilità della rete al momento dell'esecuzione del comando di aggiornamento dell'orologio. - ysap
Questo ha risolto un problema di sincronizzazione temporale sul mio Raspberry Pi. Grazie. - Oliver Spryn


Il modo corretto di farlo su un sistema Debian / Mint / Ubuntu (o su altri sistemi Debian) è di avere la linea

NTPD_OPTS="-g"

nel file

/etc/default/ntp

Questo assicura che quando ntpd viene avviato dallo script /etc/init.d/ntp, viene eseguito con l'opzione "-g", vale a dire

 start-stop-daemon --start --quiet --oknodo --pidfile /var/run/ntpd.pid --startas /usr/sbin/ntpd -- -p /var/run/ntpd.pid -g -u 124:128

per consentire a ntpd di correggere l'ora del sistema quando è più di 1000 s, ad esempio quando l'ora del sistema è il 1 ° gennaio 1970 all'avvio perché non c'è RTC hardware.


7
2018-04-03 11:20



Ce l'ho già, ma dice ancora 3:00 a New York, quando dovrebbe essere alle 23.00. - chovy
Anch'io avevo già esattamente quella linea /etc/default/ntp, ma il tempo non era sincronizzato. - Dawid Ferenczy


Prova a usare il -b opzione per aumentare il tempo.


4
2018-02-13 22:18



Quando provo dalla riga di comando, ottengo la seguente risposta: 1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting . Tuttavia, penso di aver provato questo prima di in rc.local ma non ha aiutato. - ysap
È necessario interrompere il servizio ntp prima di poter eseguire ntpdate -b <ipaddress> - Wim Deblauwe


tlsdate imposta l'orologio locale collegandosi in modo sicuro con TLS ai server remoti ed estraendo il timeout remoto dall'handshake sicuro. a differenza di ntpdate, tlsdate usa TCP, ad esempio connettendosi a un HTTPS o TLS remoto  abilitato servizio e fornisce una certa protezione contro gli avversari che cercano di  fornisci informazioni sull'orario malevolo.

$ tlsdate -V -n -H encrypted.google.com

4
2018-02-23 11:52