Beim Monitoring oder bei der Logfile-Analyse sind synchronisierte Uhren eine Voraussetzung, um Ereignisse zueinander in Beziehung setzen zu können. Nur so wird klar, ob ein Ereignis die Ursache eines anderen sein kann. Ein nützliches Kommando und die Rechenkunststücke der Shell helfen dabei.
Das Network Time Protocol (NTP), ein Standard zur Synchronisierung von Computeruhren, kann dank komplizierter Algorithmen zur Kompensation der Latenz beim Übermitteln von Zeitsignalen im Netz Genauigkeiten von bis zu 10 Millisekunden erreichen. Die Konfiguration dafür ist allerdings nicht trivial.
Wem jedoch eine sekundengenaue Uhr schon reicht, dem bietet sich ein sehr einfacher Weg ganz ohne Konfiguration – das Kommando »ntpdate«:
root@hercules# ntpdate pool.ntp.org 28 May 15:48:29 ntpdate[14466]: adjust time server 5.79.108.34 offset 0.000530 sec
Ntpdate, das als Root ausgeführt werden muss, befragt NTP-Server und begnügt sich dabei mit einem einzigen. Werden dennoch mehrere Server angegeben, sucht sich das Kommando jenen aus, der netzwerktechnisch am besten erreichbar ist. Die Zeitanpassung folgt dann einem einfachen Schema: Weicht die lokale Uhr um mehr als eine halbe Sekunde von der übermittelten Zeit des NTP-Servers ab, ruft »ntpdate« einfach die Systemfunktion »settimeofday()« mit der korrekten Uhrzeit auf. Ist die Abweichung kleiner als eine halbe Sekunde, verwendet es »adjtime()«. In beiden Fällen ist damit die Uhr mit für viele Zwecke hinreichender Genauigkeit gestellt.
Unsere Zeitrechnung
Kaum bekannt ist, dass auch eine Bash-Shell – der man außer den Grundrechenarten ja eigentlich kaum Mathe zutraut – recht komfortable Datumsrechnungen auf dem Kasten hat. Ein Beispiel wäre etwa die Frage, welches Datum von heute an in 23 Tagen erreicht sein wird:
root@hercules# date -d '+23 days' Do 20. Jun 15:54:19 CEST 2019
Es geht noch komplizierter: Angenommen, ein Benutzer wollte die Sterne zählen – abseits von lichtverschmutzten Großstädten sind ungefähr 2000 sichtbar –, wie lange würde er brauchen? Wenn er einen Stern pro Sekunde addierte und sofort loslegte, ergäbe sich:
root@hercules# date -d '+2000 seconds' Di 28. Mai 16:35:29 CEST 2019
Anderes Beispiel – noch etwas komplizierter: Wie spät war es vor drei Tagen, sieben Stunden, 13 Minuten und vier Sekunden?
root@hercules# date -d '-3 days -7 hours -13 minutes -4 seconds' Sa 25. Mai 08:52:09 CEST 2019
Die Rechnung muss auch nicht von der aktuellen Zeit ausgehen, sie darf sich auf einen beliebigen Zeitpunkt beziehen:
root@hercules# date -d '2011-01-01 + 1 year' So 1. Jan 00:00:00 CET 2012
Ja selbst umgangssprachlich benannte Zeitpunkte – freilich nur auf Englisch – kennt das Date-Kommando:
root@hercules# date -d "last monday" Mo 27. Mai 00:00:00 CEST 2019 root@hercules# date -d "next friday" Fr 31. Mai 00:00:00 CEST 2019
Mit Teleskopen bewaffnet entdecken Astronomen übrigens rund 70 Trilliarden Sterne. Das ist eine gut zehnmal größere Anzahl, als es Sandkörner auf der Erde gibt. Entsprechend würden die Sternenkundler ein paar Billiarden Jahre zählen müssen – eine Zahl in dieser Größenordnung sprengt dann selbst das Rechenvermögen von »date«.





