Wie bekomme ich zuverlässig einen Zeitstempel, bei dem das System gebootet wurde?

12

Mir ist der uptimeBefehl bekannt, aber er gibt die Sekunden seit dem Start zurück. Wenn ich also diese Zahl vom aktuellen Zeitstempel subtrahiere, kann ich theoretisch ein anderes Ergebnis erhalten, wenn sich die Sekunde ändert, nachdem ich die Betriebszeit und den aktuellen Zeitstempel gelesen habe. uptime -sist das, was ich will, aber es ist nicht auf Centos verfügbar (wie wird es übrigens berechnet?). Kann ich nur die Uhrzeit von / proc dir bekommen? Dies scheint mir die richtige Nummer zu geben, aber ich frage mich, ob jedes Linux-System / proc beim Booten erstellt hat.

Flauschige
quelle
Welches Format möchten Sie? HH:MM:SS? Etwas anderes?
Terdon
1
@terdon, UNIX-Zeitstempel
Fluffy

Antworten:

12

Zunächst einmal crtimeist es schwierig unter Linux . Das heißt, läuft so etwas wie

$ stat -c %z /proc/ 
2014-10-30 14:00:03.012000000 +0100

oder

$ stat -c %Z /proc/ 
1414674003

ist wahrscheinlich genau das, was du brauchst. Das /procDateisystem ist durch den LFS-Standard definiert und sollte für jedes Linux-System sowie für die meisten (alle?) UNIXen verfügbar sein.

Angenommen, Sie benötigen nicht wirklich die Genauigkeit von Sekunden, sondern nur den korrekten Zeitstempel, können Sie Folgendes verwenden who:

$ who -b
   system boot  2014-10-30 14:00

Von man who: -b, --boot time des letzten Systemstarts

Sie können das mit GNU in Sekunden seit der Epoche umrechnen date:

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000
terdon
quelle
1
Eine kleine Einschränkung ist, dass die Boot-Zeit von der RTC bestimmt wird, oder einige Standardeinstellungen, wenn keine RTC vorhanden ist. Diese Zeit wird utmp(von init) als "Systemstart" -Eintrag geschrieben und von gelesen who -b. Die Systemzeit ist möglicherweise bis weit in den Start hinein falsch. who -bAuf meinem RPI steht, dass es 1970 gebootet wurde, und auf einem anderen RTC-
freien