Vraag Hoe een klokupdate te forceren met behulp van ntp?


Ik run Ubuntu op een op ARM gebaseerd embedded systeem dat geen RTC met batterij ondersteunt. De wake-up-tijd is ergens in 1970. Dus gebruik ik de NTP-service om de tijd naar de huidige tijd bij te werken.

Ik heb de volgende regel toegevoegd aan /etc/rc.local het dossier:

sudo ntpdate -s time.nist.gov

Na het opstarten duurt het echter nog een aantal minuten voordat de tijd is bijgewerkt, gedurende welke periode ik niet effectief kan werken tar en make.

Hoe kan ik een klokupdate op elk gewenst moment afdwingen?


UPDATE 1: Het volgende (dankzij Eric en Stephan) werkt prima via de opdrachtregel, maar slaagt er niet in om de klok bij te werken wanneer deze wordt ingebracht /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

Wat doe ik verkeerd?


UPDATE 2: Ik heb geprobeerd de paar suggesties te volgen die naar aanleiding van de eerste update zijn ontvangen, maar niets lijkt de taak naar behoren te vervullen. Dit is wat ik heb geprobeerd:

  1. Vervang de server door us.pool.ntp.org
  2. Gebruik expliciete paden naar de programma's
  3. Verwijder de ntp service helemaal en laat gewoon sudo ntpdate ... in rc.local
  4. Verwijder de sudo van het bovenstaande commando in rc.local

Met behulp van het bovenstaande start de machine nog steeds op 1970. Wanneer u dit echter doet vanuit de opdrachtregel wanneer u bent aangemeld (via ssh), wordt de klok bijgewerkt zodra ik een beroep doe ntpdate.

Het laatste dat ik deed was om dat te verwijderen rc.local en een oproep plaatsen ntpdate in mijn .bashrc het dossier. Dit werkt de klok bij zoals verwacht, en ik krijg de echte huidige tijd zodra de opdrachtprompt beschikbaar is.

Echter, dit betekent dat als het apparaat is ingeschakeld en er geen gebruiker is aangemeld, de tijd nooit updates ontvangt. Ik kan het. Natuurlijk opnieuw installeren ntp service zodat de klok tenminste binnen enkele minuten na het opstarten wordt bijgewerkt, maar dan zijn we weer terug bij blok 1.

Dus, is er een reden waarom het plaatsen van de ntpdate commando binnen rc.local voert de vereiste taak niet uit terwijl hij dit doet .bashrc werkt prima?


324
2018-02-13 21:58


oorsprong


van [hier] [1]: ntpdate -s ntp.ubuntu.com     [1]: askubuntu.com/a/81301/130162 - 18446744073709551615
let op de '-b' vlag op ntpdate. Vanaf de manpage van ntpdate: "Forceer de tijd om te worden gestapt met behulp van de systeemaanroep settimeofday (), in plaats van te worden afgewezen (standaard) met behulp van de systeemaanroep adjtime (). Deze optie moet worden gebruikt bij het opstarten vanaf een opstartbestand tijdens het opstarten." Veel van de onderstaande antwoorden bevatten het niet, en dat is misschien een deel van het probleem om dingen aan het werk te krijgen. Bedenk dat de '-B' -markering die vermeldt dat offsets van meer dan 128 ms uren in beslag kunnen nemen om te synchroniseren met het standaard 'zwenk'-mechanisme - Matt S.
Het is niet nodig om te gebruiken sudo in /etc/rc.locale bestanden .. ze worden al als root uitgevoerd. - Soren A


antwoorden:


Waarschijnlijk de ntp service draait, dat is waarom ntpdate kan de socket niet openen (poort 123 UDP) en verbinding maken met de ntp-server.

Probeer het vanaf de opdrachtregel:

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

Als je dit wilt invoegen /etc/rc.local gebruik het volgende:

( /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



Bedankt. Kun je alsjeblieft uitleggen waarom je de expliciete paden nodig hebt? - ysap
Ik weet het niet echt. :-) Ik had moeite om eens te proberen te rennen service van rc.local en cron, maar ik heb het in plaats daarvan kunnen repareren met /etc/init.d/xxx. Eigenlijk denk ik dat je niet het volledige pad hoeft te geven ntpdate, Ik gebruik graag volledige paden in scripts om er zeker van te zijn dat het juiste bestand wordt gevonden. - Eric Carvalho
OK, dit was blijkbaar het probleem. Nu wordt de klok bijgewerkt zodra de netwerkverbinding tot stand is gebracht. Bedankt. - ysap
Ik ben er achter gekomen dat het us.pool.ntp.org is responsiever. - ysap
Met de -u optie, hoeft u de NTP-service niet te stoppen: sudo ntpdate -u time.nist.gov - Edward Anderson


In plaats van ntpdate (wat is verouderd), gebruik

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

De -gq vertelt de ntp-daemon om de tijd te corrigeren, ongeacht de offset (g) en verlaat onmiddellijk (q) na het instellen van de tijd.


427
2018-02-14 12:32



Bedankt. Laat nog steeds 1970 zien na dit commando (w / sudo). Lezing ntpd manpage, ik weet niet zeker hoe dit een update afdwingt? - ysap
De "-q" optie vertelt de NTP-daemon om op te starten, de tijd in te stellen en onmiddellijk te verlaten. Met de optie "-g" kan dit worden gecorrigeerd voor tijdsverschillen groter dan 1000 sec. Voor de langere termijn zou je gewoon de NTP-daemon moeten configureren die altijd draait. - tgharold
Dit antwoord zou naar de top moeten gaan, omdat het correct is: ntpdate is verouderd en het installeren ervan is een slecht idee, omdat het conflicteert met ntp. Als de klok ver weg is, moet je deze handmatige stap uitvoeren, omdat NTP anders je klok niet zal veranderen en je niet zal vertellen waarom. - Liam
Voor mij, sudo ntpd -gq gaat niet af! Ik ben op 14.10 en ik moet CTRL + C om door te gaan ... of hoe lang moet dit duren? - Yanick Rochon
Ter info: op mijn systeem (CentOS 6.6) moest ik de twee exemplaren van wijzigen sudo service ntp... naar sudo service ntpd.... - rinogo


Gebruik sntp om de tijd onmiddellijk in te stellen. Bijvoorbeeld:

sudo sntp -s 24.56.178.140

De nummers na -s kunnen elke ntp-tijdserver zijn, die is NIST in Ft. Collins, Colorado.


49
2017-11-08 01:00



Dat werkte! 1 - CappY
Dit werkte als "sudo ntpd -gq" dat niet deed. - Matt White
Ik weet niet hoe vaak ik op zoek ben naar dit antwoord. Werkt elke keer. - Chaos
kan pakketsntp niet vinden? - temple
apt-get install sntp / yum install sntp (ja het werkt ook op CentOS, RedHat, fedore) - ndemou


Zoals anderen hebben opgemerkt, is de beste oplossing om ntpd opdracht te geven de panic-drempelwaarde te negeren, die standaard 1000 seconden is. U kunt de panic-drempel op twee manieren configureren:

  • Bewerk /etc/default/ntp en zorg ervoor dat de -g-optie aanwezig is.
  • bewerk /etc/ntp.conf en plaats tinker panic 0 op de top

Tot nu toe is dit in wezen wat anderen hebben aanbevolen, maar er is nog een stap die ik denk dat je moet nemen. Installeer het fake-hwclock-programma:

# 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.

Met nep-hwclock geïnstalleerd, zal je machine niet starten met denken dat het helemaal opnieuw 1970 is. Wanneer je machine opstart zal het zijn klok instellen op de tijdstempel fake-hwclock schreef tijdens de laatste reboot / shutdown. Dit betekent dat je een enigszins correcte klok kunt hebben voor het geval er netwerkproblemen zijn tijdens het opstarten.


37
2018-04-03 22:11



-g leek niets voor mij te doen (aan de commandolijn, ik heb het niet /etc/default/ntp), maar toevoegen tinker panic 0 naar ntp.conf werkte - Dave Cousineau
@Sahuagin Ik weet niet wat ik je anders moet vertellen dan dat je een niet-standaard ntp-pakket hebt. / etc / default / ntp is onderdeel van het pakket van Ubuntu: packages.ubuntu.com/xenial/amd64/ntp/filelist en -g is al zolang ik me kan herinneren een optie geweest. - dfc
sorry, ik denk dat ik niet echt op Ubuntu zit en dat ik iets meer had moeten nadenken voordat ik commentaar gaf. tinker panic 0 lijkt echter zeker te hebben gewerkt. - Dave Cousineau


ntpdate is een ander programma dan de net dame. NTPDate is waarschijnlijk fout bij het booten, omdat ntpd op die socket draait.

Vanaf de opdrachtregel uitvoeren

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

U kunt ook ntpd allemaal samen verwijderen (apt-get remove ntp) en een cron-script toevoegen om ntpdate elk uur of zo te gebruiken.

BIJWERKEN

ntp service heeft waarschijnlijk geen betekenisvolle waarde voor u op dit systeem, dus verwijder die eerst.

# sudo apt-get remove ntp

Voeg nu het commando toe:

ntpdate -sb time.nist.gov

naar /etc/rclocal 

Reboot. Zou op dat moment goed moeten zijn.


12
2018-02-13 23:07



antwoord bijgewerkt. - Stephan
Wordt niet ntpdate uitgefaseerd of zoiets? Als ik dit goed begrijp, wordt de service ook uitgevoerd en wordt de synchronisatie van de lokale klok naar de klok van de server bijgehouden, zodat de afwijking is gebonden. Als u ntp verwijdert en eenmalig ntpdate uitvoert, zal dit dan niet worden beïnvloed door een klokafwijking wanneer de machine gedurende langere tijd aan staat? - ysap
Stephan, zie update # 2 van de vraag. - ysap
Ja, ntpdate wordt uitgefaseerd. Het gebruik van "ntpd -q" heeft de voorkeur (beide varianten vereisen dat ntpd eerst wordt gestopt). - tgharold


rdate -s tick.greyware.com

als u de klok maar één keer wilt instellen, eenvoudig


8
2018-02-26 22:57



Bedankt. Ik heb momenteel niet het systeem om deze opdracht te controleren, maar als u de discussie in de vraag en het geaccepteerde antwoord volgt, ziet u dat het probleem feitelijk was dat het netwerk niet beschikbaar was op het moment dat het klokupdate-commando werd uitgevoerd. - ysap
Dit maakte een probleem met de tijd sync op mijn Raspberry Pi. Dank je. - Oliver Spryn


De juiste manier om dit te doen op een Debian / Mint / Ubuntu (of ander Debian-derivaat) systeem is om de lijn te hebben

NTPD_OPTS="-g"

in het bestand

/etc/default/ntp

Dit zorgt ervoor dat wanneer ntpd wordt gestart vanuit het script /etc/init.d/ntp, dit wordt uitgevoerd met de optie "-g", nl

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

om ntpd toe te laten de systeemtijd te corrigeren wanneer deze meer dan 1000 s is, bijv. wanneer de systeemtijd 1 januari 1970 is bij het opstarten omdat er geen hardware-RTC is.


7
2018-04-03 11:20



Ik heb dat al, maar er staat nog steeds 3 AM in NY, wanneer het elf uur zou moeten zijn. - chovy
Ik had ook al precies die rij erin /etc/default/ntp, maar de tijd was niet gesynchroniseerd. - Dawid Ferenczy


Probeer de -b optie om de tijd te verplaatsen.


4
2018-02-13 22:18



Wanneer ik probeer vanaf de opdrachtregel, krijg ik de volgende reactie: 1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting . Ik denk echter dat ik dit eerder heb geprobeerd rc.local maar het hielp niet. - ysap
U moet eerst de NTP-service stoppen voordat u kunt uitvoeren ntpdate -b <ipaddress> - Wim Deblauwe


tlsdate stelt de lokale klok in door veilig verbinding te maken met TLS met externe servers en de time-out op afstand uit de beveiligde handshake te halen. anders ntpdate, tlsdate maakt gebruik van TCP, bijvoorbeeld om verbinding te maken met een externe HTTPS of TLS  service is ingeschakeld en biedt enige bescherming tegen tegenstanders die proberen  voer je kwaadaardige tijdinformatie in.

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

4
2018-02-23 11:52





https://help.ubuntu.com/lts/serverguide/NTP.html#timedatectl

gebruik timedatectl om de tijd in te stellen, ntp is verouderd.


3
2017-11-29 08:57





De ntpd-algoritmen verwijderen sample-verschuivingen van meer dan 128 ms, tenzij het interval waarin geen [absolute waarde van] sample-offset korter is dan 128 ms groter is dan 900s. De eerste sample hierna, ongeacht de offset, verplaatst de klok naar de aangegeven tijd. In de praktijk vermindert dit de valse alarmfrequentie waar de klok foutief is gestapt tot een vluchtig lage incidentie.

Normaal gaat ntpd uit als de offset de sanitaire limiet overschrijdt, die standaard 1000 s is. Dit kan worden uitgeschakeld met de optie -g:

-g     Normaal gaat ntpd uit als de offset de sanitaire limiet overschrijdt, die standaard 1000 s is. Als de sanitaire limiet op nul is ingesteld, wordt er geen sanitaire controle uitgevoerd en is elke offset acceptabel. Deze optie overschrijft de limiet en staat toe dat de tijd zonder beperking wordt ingesteld op elke waarde; dit kan echter maar één keer gebeuren. Hierna zal ntpd afsluiten als de limiet wordt overschreden. Deze optie kan worden gebruikt met de optie -q.

beide uit http://doc.ntp.org/4.1.0/ntpd.htm

- Jonathan Natale


1
2018-01-28 21:26