Befehl um die Aktualisierung der Uhrzeit zu erzwingen

  • Hallo zusammen,

    ich hätte eine kurze Frage. Der Raspberry Pi besitzt eine Fake-Hardware-Clock. Er schreibt turnusmäßig seine Uhrzeit in eine Datei und bei einem Neustart nutzt er zuerst diese Zeit bevor er die aktuelle Zeit aus dem Internet holt.

    Jetzt stellt sich für mich die Frage, wie lautet der Befehl den der Raspberry Pi ausführt um die Uhrzeit mit dem Internet abzugleichen.

    Hintergrund: Ich benötige für ein Projekt die aktuelle Uhrzeit aus dem Internet bevor ich etwas mache. Deshalb würde ich den Befehl gerne selbst ausführen bevor mein Programm weiterläuft.

    Vielen Dank für eure Antworten.

  • Befehl um die Aktualisierung der Uhrzeit zu erzwingen? Schau mal ob du hier fündig wirst!

  • Das dürfte die systemd-timesyncd.service sein, die dafür verantwortlich ist. Da könnte man vermutlich mit sudo systemctl restart systemd-timesyncd.service erfolgreich sein.

    Habe ich aber nie getestet und deshalb ohne Gewähr!

    //Edit

    Gerade getestet und scheint zu funktionieren! :)

  • Deshalb würde ich den Befehl gerne selbst ausführen bevor mein Programm weiterläuft.

    Führe:

    Code
    sudo timedatectl set-ntp true

    aus und danach sofort:

    Code
    date && rdate -4npu 130.133.1.10

    ausführen. Wenn die Ausgaben identisch sind, hat es funktioniert. BTW: rdate musst Du evtl. noch installieren:

    Code
    sudo apt install rdate
  • Wie geschrieben funktioniert die systemd-timesyncd.service zu restareten.

    D. h., es ist ein Unterschied ob systemd-timesyncd.service gestartet wird oder restartet wird? ich kann es nicht testen, weil mein PI 24/7 online ist.

  • Die systemd-timesyncd.service ist enabled und aktiv im laufenden System. Da ist es nur logisch diese zu restarten oder!? ;)

    Nach meinem letzten restart:

  • Die systemd-timesyncd.service ist enable und aktiv im laufenden System. Da ist es nur logisch diese zu restarten oder!?

    Naja, ganz logisch ist es nicht. Denn nach dem booten ist sie auch aktiv und braucht etwas Zeit für "um die Uhrzeit mit dem Internet abzugleichen". Jetzt macht man ein restart der "systemd-timesyncd.service" und plötzlich ist Alles OK?

  • Zumindest holt es die aktuelle Zeit vom NTP-Server und das war es doch was der TO wollte.

    Der TE wollte, dass _sofort_ nach dem booten, auch die _richtige_ Zeit gesetzt wird bzw. vorhanden ist und genutzt werden kann. Zwischen Zeit holen und Zeit setzen, kann m. E. ein Unterschied sein..

  • Zumindest holt es die aktuelle Zeit vom NTP-Server

    Ist es nicht möglich, dass beim Start der systemd-timesyncd.service (nach oder während des bootens) das Netzwerk noch nicht bereit ist, und somit der NTP-Server nicht antwortet?

    Ich weiß ja nicht in welchen Zeitabständen der abgefragt wird.

    Somit könnte ein restart helfen.

  • Also ich habe

    Code
    sudo systemctl disable systemd-timesyncd.service

    abgesetzt, damit der Service nicht bei Systemstart ausgeführt wird und den RPi heruntergefahren und ein paar Minuten gewartet.

    Nach dem Neustart:

    Code
    pi@avi:~ $ date
    Do 18. Mai 21:39:34 CEST 2023
    pi@avi:~ $ sudo systemctl start systemd-timesyncd.service
    pi@avi:~ $ date
    Do 18. Mai 21:47:43 CEST 2023

    Funktioniert sofort wie ich bereits schrieb.

  • Nach dem Neustart:

    Code
    pi@avi:~ $ date
    Do 18. Mai 21:47:43 CEST 2023

    Funktioniert sofort wie ich bereits schrieb.

    OK, aber wir haben hier kein Vergleich ob es ganz genau ist.

    Evtl. helfen auch die Ausgaben von:

    Code
    timedatectl timesync-status
    timedatectl show-timesync
    timedatectl status

    Der TE hat auch nicht geschrieben wie lange (12 Std.?) sein PI offline war. Möglichkeiten (auch mit dem "Holzhammer") die richtige Zeit sofort nach dem booten zu setzen, gibt es.

  • OK, aber wir haben hier kein Vergleich ob es ganz genau ist.

    8 Minuten Differenz erscheinen mir ziemlich genau zu sein. ^^ Da wirst Du mir schon vertrauen müssen, dass ich diese Zeit zwischen den beiden date nicht ausgesessen habe.


  • Da wirst Du mir schon vertrauen müssen, ...

    Vertrauen kann man, aber zeigen und sehen mit z. B.:

    Code
    :~# date && rdate -4npu 129.250.35.251
    Thu 18 May 22:16:05 CEST 2023
    Thu May 18 22:16:05 CEST 2023

    (oder gleichwertig) ist m. E. besser. ;)

  • Hintergrund: Ich benötige für ein Projekt die aktuelle Uhrzeit aus dem Internet bevor ich etwas mache. Deshalb würde ich den Befehl gerne selbst ausführen bevor mein Programm weiterläuft.

    BTW: Wenn "dein Programm" mit einer service-unit gestartet/gesteuert wird, kannst Du in seiner service-unit, auch diese Abhängigleiten:

    Code
    Requires=time-sync.target
    Requires=systemd-time-wait-sync.service
    After=time-sync.target
    After=systemd-time-wait-sync.service

    eintragen bzw. benutzen.

  • Ich mag aber rdate nicht unbedingt installieren, ...

    Ja, deshalb habe ich ja absichtlich, "oder gleichwertig" geschrieben. ;)

  • Was wäre denn evtl. gleichwertig mit rdate, ...

    Z. B.:

    Code
    :~$ curl -sD - heise.de | grep -i date
    Date: Thu, 18 May 2023 20:33:15 GMT

    oder

    Code
    :~$ telnet time.nist.gov 13 | grep -i utc
    60082 23-05-18 20:34:50 50 0 0 755.0 UTC(NIST) *

    Man muss dann nur noch von UTC/GMT auf CEST umrechnen. ;)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!