Jak utrzymuje się czas na Raspberry Pi?

17

Jak utrzymywany jest czas na Raspberry Pi dzięki najnowszej wersji Raspbian? Co ustawia zegar wewnętrzny z serwera NTP? Co się stanie, gdy nie będzie dostępny serwer NTP?

Z mojego programu próbuję ustalić, czy czas został ustawiony z NTP i poprosić użytkownika o ustawienie go, jeśli nie ma.

Chłopak
źródło
możliwy duplikat Jak dokładny jest pomiar czasu Raspberry Pi?
Piotr Kula,
4
Jeśli time.now <niż rok 2010 - czas nie jest ustawiony. Nie musisz nic więcej wiedzieć. Czas nie jest oszczędzany na wyłączeniach i będzie 1970 według specyfikacji UNIX / POSIX. Aby dowiedzieć się, czy czas jest niedokładny, należy wysłać zapytanie do NTP i porównać czas lokalny. Nie można ustalić, czy czas nie jest zsynchronizowany, bez pytania serwera czasu.
Piotr Kula
4
if time.now <2010 nie będzie działać, ponieważ RPi ustawia bieżący czas od czasu ostatniego wyłączenia. Dlatego chcę wiedzieć, jak ustawiony jest czas, aby w razie potrzeby móc wyłączyć to zachowanie.
Guy
dynia - jak to pytanie ma związek z dryfowaniem wewnętrznego zegara?
Guy
1
Być może tytuł tego pytania powinien być bardziej szczegółowy, aby uniknąć nakładania się tych pytań.
XTL,

Odpowiedzi:

22

Raspbian ma dwa rozwiązania programowe do pomiaru czasu. Ponieważ NTP wymaga połączenia sieciowego i jest całkiem bezużyteczne, jeśli Raspberry Pi nie jest podłączony do sieci, wykorzystuje również fałszywy hwclock . Okresowo zapisuje bieżący zegar i ładuje go przy uruchomieniu.

pi@raspberrypi ~ $ cat /etc/fake-hwclock.data 
2012-08-15 03:17:01

Nie jest to zbyt dokładne, ale wyeliminuje problem podróży w czasie do 1970 roku po każdym ponownym uruchomieniu.

asalamon74
źródło
Dobre domysły Jivings! :-)
Piotr Kula,
@ asalamon74: czy możesz dodać, jak wyłączyć fałszywy hwclock, czy też trzeba go odinstalować?
Guy
2

Możesz rejestrować statystyki NTP, a następnie analizować dzienniki ze swojego programu.

Ustawienia demona NTP są przechowywane w pliku /etc/ntp.conf. Odkomentowanie linii z dyrektywą statsdirumożliwiającą rejestrowanie statystyk NTP. Upewnij się, że katalog, do którego istnieje odwołanie, istnieje i jest możliwy do zapisu dla użytkownika ntpd.

Dawid Ferenczy Rogožan
źródło
1

Aby sprawdzić, czy serwer NTP ustawił czas, możesz spróbować użyć ntpq -p, otrzymasz coś takiego: *

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*223.212.138.2    .MRS.           1 u  424  512  377    4.080   -4.551  21.857
+ts0.tttsc.nvm.e  .GPS.           1 u  387  512  363    1.304   -7.563  28.405
+218.89.10.3      217.13.17.82    2 u  334  512  377    1.853   -4.562  19.474

„Zasięg” będzie wynosił> 0 w pewnym rzędzie, jeśli serwer NTP został osiągnięty i tym samym ustawił czas. Jest to 8 bitów ósemkowych przesuwających się wzdłuż, tj. 0,1,3,7,17,37,77,177,377

Lub to - możesz grepować „warstwę” <16 lub sync_ntp (oczywiście nie jest to na RPi)

$ ntpq -c rl
associd=0 status=0615 leap_none, sync_ntp, 1 event, clock_sync,
version="ntpd [email protected] Mon Jul 18 09:22:49 UTC 2013 (1)",
processor="x86_64", system="Linux/2.6.32-431.29.2.el6.x86_64", leap=00,
stratum=4, precision=-21, rootdelay=40.242, rootdisp=315.102,
refid=192.168.1.123,
reftime=d82131cd.fbb96c5e  Thu, Nov 27 2014 13:14:53.983,
clock=d82138e6.fd03bdd1  Thu, Nov 27 2014 13:45:10.988, peer=61770, tc=9,
mintc=3, offset=5.214, frequency=52.475, sys_jitter=12.217,
clk_jitter=23.319, clk_wander=1.373
$

Alternatywnie (myślę, że ntpstat nie jest dostępny natychmiast na RPi)

$ ntpstat
synchronised to NTP server (192.168.1.123) at stratum 4
   time correct to within 310 ms
   polling server every 512 s

i użyj kodów wyjścia również wyjaśnionych tutaj http://www.cyberciti.biz/faq/linux-unix-bsd-is-ntp-client-working/ co prawda nie dotyczy RPi ...

* Adresy serwera czasu nie są prawdziwe

xcxc
źródło
-1

Pomiar czasu odbywa się w oprogramowaniu. Bez korzystania z NTP nie ma pomiaru czasu.

Jeśli chcesz sprawdzić, czy zegar został ustawiony, po prostu użyj, dateaby zobaczyć, czy pokazuje on epokę Uniksa, czyli domyślnie Pi.

Jivings
źródło
2
Błędny. RPi ustawia aktualny czas od czasu ostatniego wyłączenia, gdy nie ma połączenia z siecią. Tak więc zegar zawsze ma jakiś losowy czas wcześniejszy niż właściwy czas, niekoniecznie epoka uniksowa.
Guy
2
Z pewnością nie jest to prawdą w przypadku mojego Pi. Jeśli uruchomię go bez połączenia sieciowego, to czas będzie epoką. Widzę to teraz.
Jivings,
2
Prawdopodobnie zależy to od dystrybucji.
Alex Chamberlain,
1
@AlexChamberlain Wydaje się dziwną rozbieżnością.
Jivings
1
@Jivings Jeśli na Raspbian istnieje oprogramowanie fake-hwclock, to prawdopodobnie nie będzie ono na Arch. Brzmi jak rodzaj puchu, który Arch ignoruje.
Alex Chamberlain,