Warum kann ich während dieser Simulation keinen Hinweis auf einen Schaltsekunden sehen?

641
Lightness Races in Orbit

Ich versuche, die bevorstehende Schaltsekunde zu simulieren, um das Verhalten meiner Anwendung zu dieser Zeit testen zu können, aber ich bin nicht überzeugt, dass ich den Test richtig einrichte.

In CentOS 7.2.1511 in einer virtuellen Oracle VirtualBox-Maschine kann ich NTP einrichten und den Test starten:

yum install ntp  echo "server 127.127.1.0" > /etc/ntp.conf echo "fudge 127.127.1.0 stratum 10" >> /etc/ntp.conf echo "leapfile \"/var/ntp/leap-seconds.list\"" >> /etc/ntp.conf  mkdir /var/ntp wget -P /var/ntp https://www.ietf.org/timezones/data/leap-seconds.list  setenforce 0 # avoids having to configure SELinux access to the .list  date -s "2016-12-31 23:55"  service ntpd restart 

Wenn Sie jedoch den folgenden Befehl ausführen, wird mir gezeigt, dass es keinen Zeitschritt gibt:

$ i=0; while true; do echo -n "$i: "; date -u; ((i++)); sleep 1; done (..) 45: Sat 31 Dec 23:59:56 UTC 2016 46: Sat 31 Dec 23:59:57 UTC 2016 47: Sat 31 Dec 23:59:58 UTC 2016 48: Sat 31 Dec 23:59:59 UTC 2016 49: Sun 1 Jan 00:00:00 UTC 2017 50: Sun 1 Jan 00:00:01 UTC 2017 51: Sun 1 Jan 00:00:02 UTC 2017 52: Sun 1 Jan 00:00:03 UTC 2017 53: Sun 1 Jan 00:00:04 UTC 2017 (..) 

Ich schaue mir die Ausgabe an, wie sie kommt, und jede Zeile wird eine Sekunde nach der anderen gedruckt.

Und (obwohl dies schwieriger zu demonstrieren ist), kann ich in den von meiner Anwendung erzeugten Datendateien keine Anzeichen für eine Taktverschiebung erkennen. meine NTP-Konfiguration sollte sowieso stufen anstatt zu schwenken :

$ cat /etc/sysconfig/ntpd OPTIONS="-g" 

Mein lokaler Refclock-NTP-Server scheint die Arbeit bis zu einem gewissen Grad zu erledigen, da im Systemprotokoll Folgendes angezeigt wird:

Dec 31 23:59:59 localhost ntpd[1871]: 0.0.0.0 051b 0b leap_event 

Was fehlt mir hier?

-1
Kannst du die Ausgabe von `ntpq -pcrv` bitte posten? Der Sprung meiner Produktionsboxen (Centos 6) sollte zwar aktiviert, aber nicht aktiv sein. Welche Version der Sprungdatei verwenden Sie auch? user3788685 vor 7 Jahren 0
@ user3788685: http://pastebin.com/jEGNZPzf Die Sprungdatei wird direkt von IETF.org heruntergeladen, wie Sie anhand der obigen Schritte sehen können. Lightness Races in Orbit vor 7 Jahren 0
gab es irgendetwas in "dmesg" - Sie sollten eine Zeile wie "Kernel mit Schaltsekunde" erhalten. Ich bekomme sowohl die 60. Sekunde als auch die Protokollnachrichtenzeile, wenn ein gültiger Sprung eingefügt wird. user3788685 vor 7 Jahren 0
@ user3788685: Nein, daran kann ich mich nicht erinnern. Lightness Races in Orbit vor 7 Jahren 0
FWIW, die wahre Schaltsekunde, traf in der Nacht des 31. AFAICT richtig zu. Lightness Races in Orbit vor 7 Jahren 0

1 Antwort auf die Frage

1
Darren

Ich möchte dies als Kommentar zur Antwort von grawity hinzufügen, aber ich habe nicht genügend Vertreter. Er hat zwar Recht, dass die nicht richtige Zeitzone das Vorhandensein einer Sekunde namens "60" nicht berücksichtigt (dh, Sie sehen keinen Zeitstempel 23:59:60), der Linux-Kernel sollte jedoch noch eingefügt werden eine Schaltsekunde durch zweimalige Wiederholung der zweiten 59 (siehe hier für weitere Informationen). Sie sollten also eine Wiederholung des Zeitstempels 23:59:59 sehen. Ich habe reproduziert, was Sie sehen, also sind Sie nicht verrückt, aber ich versuche immer noch herauszufinden, warum.

Zu prüfen ist, dass Ihr lokaler ntp-Daemon definitiv das Flag für die Schaltsekunde für die Sprungsekunde einfügt (entweder indem Sie LI = 1 im Paket mit Wireshark oder ähnlichem prüfen oder diesen ntpq-Befehl verwenden:

ntpq -c 'lassoc' -c "mrv &1 &999 leap,srcadr,stratum" 

Suchen Sie nach Sprung = 01. Meines ist so, die Ermittlungen gehen weiter ...

http://pastebin.com/ubGRJQiD "leap = 00"! Lightness Races in Orbit vor 7 Jahren 0