Jak niezawodnie uzyskać znacznik czasu, w którym system został uruchomiony?

13

Zdaję sobie sprawę z uptimepolecenia, ale zwraca ono sekundy po uruchomieniu, więc jeśli odejmę tę liczbę od bieżącego znacznika czasu, teoretycznie mogę uzyskać inny wynik, jeśli sekunda zmieni się po przeczytaniu czasu działania i aktualnego znacznika czasu. uptime -sjest to, czego chcę, ale nie jest dostępne w centach (jak to jest obliczane btw?). Czy mogę dostać ctime z / proc dir? Wydaje mi się, że to daje mi odpowiednią liczbę, ale zastanawiam się, czy każdy system linuksowy ma / proc utworzony podczas rozruchu.

Puszysty
źródło
Jakiego formatu chcesz? HH:MM:SS? Coś innego?
terdon
1
@terdon, sygnatura czasowa UNIX
Fluffy

Odpowiedzi:

12

Przede wszystkim crtimejest trudny w Linuksie . To powiedziawszy, prowadzenie czegoś takiego

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

lub

$ stat -c %Z /proc/ 
1414674003

jest prawdopodobnie dokładnie tym, czego potrzebujesz. System /procplików jest zdefiniowany przez standard LFS i powinien być dostępny dla każdego systemu Linux, a także dla większości (wszystkich?) Systemów UNIXen.

Alternatywnie, zakładając, że tak naprawdę nie potrzebujesz precyzji sekund, ale potrzebujesz tylko znacznika czasu, możesz użyć who:

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

Od man who: -b, - czas rozruchu ostatniego uruchomienia systemu

Możesz to przekonwertować na sekundy od epoki za pomocą GNU date:

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000
terdon
źródło
1
Drobne zastrzeżenie polega na tym, że czas rozruchu jest określany na podstawie RTC, lub niektórych domyślnych, jeśli brakuje RTC. Ten czas jest zapisywany jako utmp(przez init) jako pozycja „rozruchu systemu” i czytany przez who -b. Czas systemowy może być niepoprawny do momentu dobrego uruchomienia. who -bna moim rPi mówi, że uruchomił się w 1970 roku, a inny ARM bez RTC mówi 2008 ;-)
mr. spuratic
1

Innym rozwiązaniem jest /proc/stat„s btime: [1]

$ cat /proc/stat | grep btime | awk '{print $2}'

Przykładowe dane wyjściowe:

1583547431

Jest to znacznik czasu sprzed epoki.

[1] http://man7.org/linux/man-pages/man5/proc.5.html

Jay Sullivan
źródło