Właściwie każdy komputer, od telefonu o serwer, powinien mieć dobrze zsynchronizowany czas. Służy do tego protokół NTP - Network Time Protocol. Na komputerze musi działać klient tego protokołu i to on zajmuje się synchronizacją czasu z serwerami wzorców czasu w Internecie.
W stacjach roboczych Linux, w zależności od sposobu instalacji, możemy już mieć taki program klienta zainstalowany i przeważnie nie wiemy o jego istnieniu. Warto to jednak sprawdzić i, być może zainstalować bardziej odpowiednie narzędzie.
Przeglądając dokumentację i zalecenia na temat NTP szybko odkryjemy, że
narzędzie od synchronizacji czasu jest dostępne w ramach pakietu systemd
jako systemd-timesyncd. W przypadku stacji roboczej, komputera osobistego
zaleca się zainstalowanie i włączenie tego narzędzia i na tym można by temat
zakończyć.
Jednak co w przypadku kiedy to rozwiązanie nam nie odpowiada, bądź chcemy zorganizować mały serwer czasu dla lokalnej sieci ? Okazuje się, że narzędzi synchronizacji czasu jest w Linuksie całkiem sporo. Omówimy je po kolei. Przeprowadzimy przegląd dostępnych rozwiązań głównie opierając się dystrybucji Debian, ale sytuacja jest podobna dla innych popularnych dystrybucji.
Najpierw jednak kilka słów o synchronizacji czasu.
Po co stosować synchronizację?
Każdy komputer ma wbudowany zegar, mógłby ktoś powiedzieć, więc po co synchronizować czas z sieci? Niestety zegary komputerowe nie są zbyt dokładne, mają tendencję do odbiegania od prawidłowego czasu. Jest też wiele innych komplikacji - przemieszczanie się w strefach czasowych, długo pracujące serwery odliczają czas w taki sposób, że czas ten zaczyna odbiegać od czasu uniwersalnego. Tymczasem prawidłowy czas oprócz oczywistej wygody użytkowej ma kolosalny wpływ na właściwe oznaczanie czasu tworzenia plików, realizację cyklicznych zadań, czy właściwe wpisy w logach.
Jednak chyba najważniejsza w zgodności z czasem uniwersalnym jest współpraca komputerów przy zachowaniu bezpieczeństwa. Certyfikaty, szyfry, uwierzytelnianie wieloskładnikowe mają swoje ścisłe zakresy czasowe. Bez prawidłowo działającego zegara nasz komputer szybko będzie miał problemy z łączeniem się z innymi maszynami w Sieci.
System synchronizacji czasu

Do synchronizacji czasu między urządzeniami połączonym w Sieci służy Protokół NTP. Istotnymi są elemtami są tu serwery czasu które, udostępniają dokładny czas innym urządzeniom. Serwer tworzą strukturę hierarchiczną, na szczycie której znajdują się serwery dołączone bezpośrednio do zegarów tzw. atomowych. Zegary te zaawansowane specjalistyczne urządzenia, które na bazie zjawisk fizycznych na poziomie subatomowym odmierzają czas z taką dokładnością na jaką tylko pozwala stan wiedzy naukowej i technicznej. Są one utrzymywane w wyspecjalizowanych ośrodkach badawczych, często pod kontrolą państwowych urzędów do spraw miar i normalizacji.
Z serwerami najwyższego poziomu (Stratum 0/1) łączą się kolejne serwery które dystrybuują czas w sieci, do kolejny warstw serwerów i systemów klienckich.
Wiele z opisanych tu systemów synchronizacji może pełnić dwie funkcje jednocześnie - klienta i serwera systemu NTP. W obu trybach program łączy się ze źródłami czasu, którymi są najczęściej inne serwery w sieci i ustala najbardziej precyzyjny czas. W trybie klienta, na tej podstawie reguluje czas w lokalnym systemie tak aby był on zgodny z czasem powszechnym reprezentowanym przez serwery NTP wyższego poziomu. W trybie serwera, w zależności od konfiguracji, program udostępnia czas innym komputerom czy to w sieci lokalnej czy globalnie. Sam staję się serwerem niższego poziomu (stratum) niż źródła z których pobiera czas.
Systemd-timesyncd
timesyncd jest prostym klientem NTP. Nie ma funkcji serwera. Jest
rozwiązaniem całkowicie wystarczającym dla komputera osobistego, gdy zależy
nam tylko na tym by mieć dokładny czas w swoim urządzeniu.
timesyncd jest często domyślnie instalowany w dystrybucjach Linuksa. Przeważnie nie
wymaga od użytkownika dodatkowej konfiguracji.
Łączy się z predefiniowanymi w dystrybucji serwerami
czasu i po prostu robi swoje.
W razie potrzeby, plik konfiguracyjny znajduje się w
/etc/systemd/timesyncd.conf
Do timesyncd dołączone jest polecenie timedatectl, które służy do
wyświetlania stanu usługi i do ręcznego ustawiania niektórych parametrów
Przykłady użycie timedatectl:
$ timedatectl
Local time: pią 2025-10-31 09:11:01 CET
Universal time: pią 2025-10-31 08:11:01 UTC
RTC time: pią 2025-10-31 08:11:01
Time zone: Europe/Warsaw (CET, +0100)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Wyświetlenie dokładniejszej informacji o synchronizacji:
$ timedatectl timesync-status
Server: 213.222.217.10 (2.debian.pool.ntp.org)
Poll interval: 34min 8s (min: 32s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 2
Reference: C292FB64
Precision: 1us (-23)
Root distance: 57.823ms (max: 5s)
Offset: -73us
Delay: 14.976ms
Jitter: 4.331ms
Packet count: 586
Frequency: +17,993ppm
NTPsec
NTPsec to poprawiona, bezpieczniejsza implementacja wywodząca się z
projektu NTP Classic rozwijanego od 1998 roku.
Jest to cały projekt i pakiet narzędzi, z których głównym jest ntpd - serwer
będący jednocześnie klientem i serwerem czasu. Towarzyszą mu komendy
pozwalające podglądać stan serwisu i synchronizacji z innymi serwerami oraz
kontrolować usługę.
ntpd jest programem demona systemowego. Jest uruchamiany przy starcie
systemu, odczytuje swoją konfigurację z pliku /etc/ntpsec/ntp.conf i pracuje nad
utrzymaniem prawidłowego czasu na komputerze.
Aktualny stan demona ntpd można podejrzeć programem narzędziowym ntpq
Przykłady użycia ntpq
Lista serwerów z którymi synchronizuje się lokalny ntpd:
$ ntpq -p
remote refid st t when poll reach delay offset jitter
===============================================================================================
0.debian.pool.ntp.org .POOL. 16 p - 256 0 0.0000 0.0000 0.0001
1.debian.pool.ntp.org .POOL. 16 p - 256 0 0.0000 0.0000 0.0001
2.debian.pool.ntp.org .POOL. 16 p - 256 0 0.0000 0.0000 0.0001
3.debian.pool.ntp.org .POOL. 16 p - 256 0 0.0000 0.0000 0.0001
+212.127.78.21 194.146.251.101 2 u 974 1024 377 9.9910 0.0672 0.0508
+vps-9db82e34.vps.ovh.net 212.127.78.21 3 u 796 1024 377 6.4249 -0.6560 0.1099
+host-85-115-212-254.wawtel.pl 172.16.254.5 2 u 186 1024 377 6.4415 0.3083 0.2477
*ip-89-250-197-242.rev.snt.net.p 194.146.251.100 2 u 726 1024 377 5.8464 0.1146 0.2768
-ntp01.pingless.com 189.97.54.122 2 u 380 1024 377 19.8625 0.1255 0.1904
-176.32.165.145 80.79.27.111 3 u 506 1024 377 14.4271 1.2555 0.1558
-rebecca.static.ip.wro.korbank.p 194.146.251.100 2 u 166 1024 373 10.1681 0.1395 10.9511
Inna wersja z wyświetleniem jednostek:
$ ntpq -u -c peers
remote refid st t when poll reach delay offset jitter
===============================================================================================
0.debian.pool.ntp.org .POOL. 16 p - 64 0 0ns 0ns 60ns
1.debian.pool.ntp.org .POOL. 16 p - 64 0 0ns 0ns 60ns
2.debian.pool.ntp.org .POOL. 16 p - 64 0 0ns 0ns 60ns
3.debian.pool.ntp.org .POOL. 16 p - 256 0 0ns 0ns 60ns
+193.59.134.156 192.168.11.15 2 u 567 1024 377 10.486ms 7.591us 196.43us
+ntp01.pingless.com 189.97.54.122 2 u 79 1024 377 19.662ms 12.862us 75.854us
-109-206-205-233.host.skynet.net .ANT2. 1 u 855 1024 377 6.6996ms 53.228us 127.72us
-tempus2.gum.gov.pl .EXT. 1 u 389 1024 377 7.6274ms 120.52us 123.85us
+host-85-115-212-250.wawtel.pl .PPSm. 1 u 535 1024 377 5.9762ms 55.025us 107.14us
*tempus3.gum.gov.pl .EXT. 1 u 880 1024 377 7.5483ms -74.25us 112.09us
-vps-9db82e34.vps.ovh.net 212.127.78.21 3 u 605 1024 377 6.5080ms -658.0us 63.681us
Znak na początku lini opizuje stan synchronizacji. '*' oznacza serwer z do którego aktualnie lokalny 'ntpd' jest podłączony. Jest to serwer Stratum 1 (st), a więc podłączony do zewnętrznego źródła czasu. Opóźnienie komunikacji jest na poziomie 7.6 milisekundy. Różnica czasu między lokalnym urządzeniem a serwerem to 120 mikrosekund, a wahania opóźnienia sygnału wynikające z jakości komunikacji sieciowe są na poziomie 123 mikrosekund
Parametry lokalne
$ ntpq -u -c sysinfo
associd=0 status=0015 leap_none, sync_unspec, 1 event, clock_sync,
system peer: tempus1.gum.gov.pl:123
system peer mode: client
leap indicator: 00
stratum: 2
log2 precision: -24
root delay: 7.712ms
root dispersion: 30.917ms
root distance 10.835ms
reference ID: 194.146.251.100
reference time: ecb5f513.8e5eb1fb 2025-11-05T16:08:51.556Z
system jitter: 608.49us
clock jitter: 305.84us
clock wander: 14.19ppb
symm. auth. delay: 0us
Openntpd
Implementacja regulatora czasu NTP z projektu OpenBSD. Obsługuje tylko podzbiór funkcjonalności protokołu NTP, tym nie mniej może służyć jako klient i serwer NTP. Repozytorium na GitHubie wskazuje, że rozwój projektu znacznie zwolnił około 2020 roku.
Chrony
Chrony do całkowicie niezależna implementacja protokołu NTP. Został stworzony z myślą klientach w dynamicznie zmieniających się warunkach sieciowych. Laptop przełączający się między sieciami, wyłączany i włączany wielokrotnie w ciągu dnia. Zapchane, powolne łącza sieciowe, nawet wahania temperatury. To wszystko wpływa na jakość synchronizacji czasu i do radzenia sobie z takimi problemami zostało stworzone Chrony.
Pakiet Chrony zawiera program Chrony, który może działać zarówna jako klient jak i serwer NTP. Oprócz tego dostępne jest polecenie chronyc służące do kontroli programu serwerowego. Chrony jest domyślnym programem NTP instalowanym w dystrybucjach z rodziny Fedora/ RHEL.
Przykłady
Status usługi chrony:
$ chronyc tracking
Reference ID : C292FB66 (tempus3.gum.gov.pl)
Stratum : 2
Ref time (UTC) : Sat Nov 08 16:45:39 2025
System time : 0.000015665 seconds fast of NTP time
Last offset : +0.000029682 seconds
RMS offset : 0.000050128 seconds
Frequency : 2.980 ppm slow
Residual freq : +0.000 ppm
Skew : 0.010 ppm
Root delay : 0.007839182 seconds
Root dispersion : 0.001460391 seconds
Update interval : 1034.2 seconds
Leap status : Normal
$ chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* tempus3.gum.gov.pl 1 10 377 366 +152us[ +182us] +/- 4961us
^- time.taken.pl 2 10 377 128 +430us[ +430us] +/- 29ms
^+ 193.59.134.156 2 10 377 719 +81us[ +110us] +/- 5557us
^+ ip-89-250-197-242.rev.sn> 2 10 377 361 -48us[ -48us] +/- 5821us
Inne
Czasem przydatne jest polecenie ntpdate. Można nim odpytać zewnętrzny
serwer o czas i zobaczyć jak różni się lokalny zegar od tego serwera:
$ ntpdate -q ntp1.tp.pl
2025-11-09 09:42:40.344861 (+0100) -0.000186 +/- 0.002889 ntp1.tp.pl 80.50.231.226 s1 no-leap
ntpdate może też służyć do jednorazowego szybkiego nastawienia lokalnego
zegara:
$ ntpdate ntp1.tp.pl
Warto sprawdzić czy i jaki system czasu działa na naszej maszynie:
ps -ef | grep -E 'ntpd|chronyd|timesyncd' | grep -v grep
ntppool.org
Przy omawianiu oprogramowania do synchronizacji czasu, warto jeszcze wspomnieć o projekcie NTP Pool. Jest to przedsięwzięcie mające na celu gromadzenie wolontariuszy prowadzących serwery czasu i udostępniających je do użytku publicznego. Serwery są dostępne w domenie pool.ntp.org. Korzystają z nich dystrybucje, np w konfiguracji ntpsec w Debianie znajdziemy wpisy:
pool 0.debian.pool.ntp.org iburst
pool 1.debian.pool.ntp.org iburst
pool 2.debian.pool.ntp.org iburst
pool 3.debian.pool.ntp.org iburst
pozwalające demonowi czasu wybrać z puli serwery, które może zacząć odpytywać o sygnały czasu.
Do projektu NTP Pool, może się przyłączyć każdy kto dysponuje w miarę stabilnym łączem internetowym z niezmieniającym się adresem IP i oczywiście komputerem, który będzie działał ciągle.
Podsumowanie
Dla każdego komputera ważne jest utrzymanie prawidłowego czasu. Warto
wiedzieć jakie oprogramowanie o to dba. Dla komputerów osobistych i
niewielkich serwerów najczęściej timesyncd z projektu systemd. Dla
poważniejszych serwerów i sieci lokalnych lepiej nadaje się chrony lub
ntpsec.
Komputery utrzymują zgodność z czasem uniwersalnym za pomocą protokołu NTP,
synchronizując się z serwerami czasu, połączonymi w strukturę hierarchiczną,
na szczycie której znajdują się maszyny połączone z zegarami atomowymi.
Dystrybucję czasu w Internecie wspierają wolontariusze zgromadzeni w
projekcie NTP Pool, oraz firmy i instytucje dostarczające usługi
internetowe.
Linki
- https://chrony-project.org/
- https://ntpsec.org/
- https://www.openntpd.org/
- https://www.ntppool.org/pl/
- https://github.com/systemd/systemd/tree/main/src/timesync