timedatectl: sprawdzanie synchronizacji czasu serwera Linux i ustawianie strefy czasowej

Środowisko testoweRodzina RHELAlmaLinux 9.8systemd 252 · chrony 4.8konto rootDebian 12 zwykłe kontoSprawdzono 2026-10-29
Polecenia informacji · ustawień systemutimedatectlLokalizacja/usr/bin/timedatectl

timedatectl to polecenie systemd, które pokazuje i zmienia zegar systemowy, strefę czasową oraz stan synchronizacji czasu przez NTP na serwerze Linux. Przy sprawdzaniu synchronizacji na serwerze AlmaLinux 9 z chrony i na serwerze Debian 12 z ntpsec oba serwery miały poprawny zegar, ale wiersz NTP service pokazał na jednym active, a na drugim n/a.

Poniższe wyniki pochodzą z obu serwerów. Na przykładowe wartości zamieniono tylko nazwy hostów, adresy IP i numery wersji pakietów, a poleceń zmieniających czas lub strefę czasową nie uruchamiano na serwerze produkcyjnym.

1️⃣ Użycie timedatectl i sprawdzanie czasu serwera Linux

timedatectl bez opcji daje ten sam wynik co z dodanym status. Czas zegara systemowego i zegara sprzętowego (RTC), strefa czasowa i stan synchronizacji są zebrane na jednym ekranie. Poniżej wynik na serwerze Debian 12.

timedatectl
               Local time: Wed 2026-10-28 19:49:57 UTC
           Universal time: Wed 2026-10-28 19:49:57 UTC
                 RTC time: Wed 2026-10-28 19:49:57
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: n/a
          RTC in local TZ: no

Strefa czasowa serwera Debian 12 to Etc/UTC, dlatego Local time i Universal time pokazały ten sam czas. Co oznacza każdy wiersz i wyniki obu serwerów pokazuje tabela poniżej.

Wiersz wynikuCo pokazujeWyniki obu serwerów i na co zwrócić uwagę
Local timeBieżący czas zegara systemowego z uwzględnieniem strefy czasowejPo zmianie strefy czasowej tylko ten wiersz i wynik date pokazują nową strefę
Universal timeTen sam czas wyrażony w UTCNie zmienia się przy zmianie strefy – na serwerze Debian 12 (Etc/UTC) równy Local time
RTC timeCzas zegara sprzętowego (RTC)Pokazany bez strefy czasowej – czas UTC, gdy RTC in local TZ ma wartość no
Time zoneUstawiona strefa czasowa, jej skrót i różnica względem UTCPrzy zmianie użyj nazwy z listy list-timezones
System clock synchronizedCzy jądro uznaje zegar za zsynchronizowanyyes na obu serwerach – przy no najpierw sprawdź serwer odniesienia za pomocą chronyc tracking lub ntpq -p
NTP serviceCzy działa usługa synchronizacji, którą timedatectl włącza i wyłączaAlmaLinux 9 (chrony) active, Debian 12 (ntpsec) n/a – n/a oznacza usługę nieznaną timedatectl, więc sprawdź ją przez systemctl
RTC in local TZCzy zegar sprzętowy pracuje w czasie lokalnym (no = UTC)no na obu serwerach – polecenie zmieniające yes na UTC to set-local-rtc 0

Linux ma dwa zegary. Zegar systemowy utrzymuje jądro po uruchomieniu systemu, a zegar sprzętowy to zegar na płycie głównej, który odmierza czas nawet przy wyłączonym serwerze.

Zegar sprzętowy odczytuje się bezpośrednio poleceniem hwclock. hwclock wypisuje czas przeliczony na bieżącą strefę czasową. Na serwerze AlmaLinux odczyt z TZ=UTC przed poleceniem zwrócił czas UTC zakończony na +00:00.

TZ=UTC hwclock --show
2026-10-28 19:53:33.006788+00:00

Na serwerze Debian 12, po połączeniu ze zwykłego konta, to samo polecenie zakończyło się bez dostępu do zegara sprzętowego.

/usr/sbin/hwclock --show
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --verbose option to see the details of our search for an access method.

Wiersz RTC in local TZ to to samo ustawienie co trzeci wiersz pliku /etc/adjtime. Na serwerze AlmaLinux trzeci wiersz miał wartość UTC, co oznacza, że zegar sprzętowy pracuje w UTC.

cat /etc/adjtime
0.0 0 0.0
0
UTC

Do odczytu wartości w skrypcie używaj show zamiast status. Na serwerze Debian 12 te same dane pojawiają się w postaci nazwa=wartość, po jednej w wierszu.

timedatectl show
Timezone=Etc/UTC
LocalRTC=no
CanNTP=no
NTP=no
NTPSynchronized=yes
TimeUSec=Wed 2026-10-28 19:49:57 UTC
RTCTimeUSec=Wed 2026-10-28 19:49:57 UTC

Wybierz właściwości przez -p i dodaj --value, aby zostały same wartości bez nazw. Tej postaci używa się, aby wyciągnąć tylko nazwę strefy czasowej.

timedatectl show -p Timezone --value
Etc/UTC

🔲 Symulator polecenia timedatectl

W symulatorze poniżej możesz sam wpisać polecenia do sprawdzania czasu, listowania stref czasowych, zmiany strefy i sprawdzania synchronizacji przez chronyc.

Symulator polecenia timedatectlsystemd 252 · chrony 4.8
[root@server work]#
Działa tylko w przeglądarce. Zmieniona strefa czasowa po odświeżeniu wraca do początku (Etc/UTC), a ↑↓ przywołuje wcześniejsze polecenia.

2️⃣ Stan synchronizacji czasu serwera Linux

Wiersz System clock synchronized pokazuje, czy jądro uznaje zegar za zsynchronizowany, a wiersz NTP service, czy działa usługa synchronizacji, którą timedatectl może włączać i wyłączać. W show te same wartości pojawiają się jako NTPSynchronized i NTP, a CanNTP pokazuje, czy istnieje usługa synchronizacji, którą da się włączać i wyłączać.

Na serwerze AlmaLinux 9 z chrony wszystkie trzy wartości były yes.

timedatectl show -p CanNTP -p NTP -p NTPSynchronized
CanNTP=yes
NTP=yes
NTPSynchronized=yes

Na serwerze Debian 12, który ustawia czas przez ntpsec, tylko NTPSynchronized miało wartość yes, a CanNTP i NTP miały no. Dlatego na ekranie status tego serwera wiersz NTP service pokazał n/a.

timedatectl show -p CanNTP -p NTP -p NTPSynchronized
CanNTP=no
NTP=no
NTPSynchronized=yes

Sama usługa ntpsec działała.

systemctl is-active ntpsec
active

timedatectl zna tylko usługi synchronizacji wpisane w pliki list w folderze ntp-units.d, a pakiety dystrybucji umieszczają te pliki w /usr/lib/systemd/ntp-units.d/ (według oficjalnej dokumentacji). Na serwerze AlmaLinux 9 był plik listy zainstalowany przez pakiet chrony, zawierający jeden wiersz: chronyd.service.

cat /usr/lib/systemd/ntp-units.d/50-chronyd.list
chronyd.service
rpm -qf /usr/lib/systemd/ntp-units.d/50-chronyd.list
chrony-4.8-10.el9.x86_64

Na serwerze Debian 12 tego folderu nie było. Ponieważ ntpsec nie ma na liście, timedatectl wiedział, że zegar jest zsynchronizowany, ale nie mógł tej usługi włączyć ani wyłączyć.

ls /usr/lib/systemd/ntp-units.d/
ls: cannot access '/usr/lib/systemd/ntp-units.d/': No such file or directory
🖥️ timedatectlstatus, show, set-ntp
ntp-units.d/*.listLista usług synchronizacji, które timedatectl włącza i wyłącza
chronyd.serviceNa liście → NTP service: active
ntpsec.servicePoza listą → NTP service: n/a

3️⃣ Sprawdzanie synchronizacji czasu za pomocą chronyc

Na serwerze z chrony serwer czasu, według którego ustawiany jest zegar, sprawdza się poleceniem chronyc. sources wypisuje serwery czasu odpytywane przez chronyd i ich stan, po jednym w wierszu.

chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- 192.0.2.10                    2  10   377   943   +272us[ +275us] +/-   55ms
^- ntp1.example.com              2  10   377    80    -28us[  -32us] +/- 3655us
^- 198.51.100.33                 3  10   257   384   -151us[ -156us] +/-   97ms
^- 198.51.100.82                 3  10   177   532   +157us[ +149us] +/-   45ms
^* 192.0.2.123                   3   4   377     2    -21us[  -23us] +/-  312us

Początkowy znak ^ oznacza serwer czasu, * jako drugi znak oznacza serwer odniesienia, według którego zegar jest teraz ustawiany, a - kandydata niewliczanego do obliczeń. Poll 4 przy serwerze odniesienia oznacza odpytywanie co 16 sekund (2 do potęgi 4), a Reach 377 oznacza, że odebrano wszystkie osiem ostatnich odpowiedzi.

tracking pokazuje, o ile zegar systemowy odbiega od czasu serwera odniesienia.

chronyc tracking
Reference ID    : C000027B (192.0.2.123)
Stratum         : 4
Ref time (UTC)  : Wed Oct 28 19:50:21 2026
System time     : 0.000002422 seconds slow of NTP time
Last offset     : -0.000002098 seconds
RMS offset      : 0.000000981 seconds
Frequency       : 6.348 ppm slow
Residual freq   : -0.001 ppm
Skew            : 0.017 ppm
Root delay      : 0.000300815 seconds
Root dispersion : 0.000150780 seconds
Update interval : 16.3 seconds
Leap status     : Normal

Wiersz System time pokazuje, że zegar systemowy spóźniał się o 0.000002422 sekundy względem czasu NTP, a Leap status miał wartość Normal. Update interval równy 16.3 sekundy to odstęp między dwiema ostatnimi aktualizacjami zegara.

To, które serwery są odpytywane, ustalają wiersze pool i server w /etc/chrony.conf. Po usunięciu komentarzy i pustych wierszy zostają tylko poniższe wiersze ustawień.

grep -v "^#" /etc/chrony.conf | grep -v "^$"
pool 2.almalinux.pool.ntp.org iburst
sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony
server 192.0.2.123 prefer iburst minpoll 4 maxpoll 4

Wiersz pool odpytuje pulę NTP AlmaLinux, a prefer w ostatnim wierszu server to opcja, dzięki której chronyd wybiera ten serwer przed innymi. makestep 1.0 3 to ustawienie, które przy trzech pierwszych aktualizacjach po starcie chronyd koryguje jednym skokiem zegar przesunięty o ponad 1 sekundę, a potem dostraja go stopniowo, nieco go przyspieszając lub spowalniając. rtcsync sprawia, że jądro co 11 minut zapisuje czas systemowy do zegara sprzętowego (według oficjalnej dokumentacji).

Na serwerze Debian 12 z ntpsec te same dane sprawdzono poleceniem ntpq -p. Początkowy znak * to serwer odniesienia, a wszystkie trzy serwery były odpytywane co 1024 sekundy.

ntpq -p
     remote           refid      st t when poll reach   delay   offset   jitter
===============================================================================
+203.0.113.43    198.51.100.28    2 u  835 1024  377 184.6893  -0.1018   1.4879
+203.0.113.44    198.51.100.27    2 u  547 1024  377 183.0827  -2.4227   4.0957
*ntp2.example.co 198.51.100.40    2 u  440 1024  377 177.4670  -0.5814   1.7070

4️⃣ Zmiana strefy czasowej za pomocą timedatectl

Nazwy stref czasowych sprawdza się poleceniem list-timezones. Większość ma postać Kontynent/Miasto, po jednej w wierszu, a na obu serwerach było ich 598.

timedatectl list-timezones | head -5
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
timedatectl list-timezones | wc -l
598

Lista jest długa, więc przy szukaniu nazwy filtruj ją przez grep.

timedatectl list-timezones | grep -i new_york
America/New_York

Strefę czasową zmienia się, podając po set-timezone nazwę z listy. To polecenie podmienia dowiązanie /etc/localtime na nowy plik strefy czasowej, więc ze zwykłego konta uruchamia się je z sudo.

sudo timedatectl set-timezone America/New_York

Poleceniem ls -l sprawdzisz, czy /etc/localtime jest dowiązaniem do pliku strefy czasowej.

ls -l /etc/localtime
lrwxrwxrwx 1 root root 27 Sep 24 12:52 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC

Nazwa spoza listy została od razu odrzucona, zanim strefa czasowa się zmieniła.

timedatectl set-timezone Mars/Olympus
Failed to set time zone: Invalid or not installed time zone 'Mars/Olympus'

Zmiana strefy czasowej nie zmienia czasu zegara systemowego; w nowej strefie pojawiają się tylko Local time i wynik polecenia date. Na serwerze z zegarem sprzętowym w UTC zegar sprzętowy też się nie zmienia (według oficjalnej dokumentacji).

5️⃣ Włączanie NTP i ręczne ustawianie czasu za pomocą timedatectl

set-ntp true uruchamia pierwszą usługę z listy usług synchronizacji i włącza jej start przy rozruchu. false zatrzymuje usługi z listy i wyłącza ich start przy rozruchu (według oficjalnej dokumentacji).

sudo timedatectl set-ntp true

Na serwerze Debian 12 bez pliku listy polecenie nawet z false, czyli bieżącą wartością, zakończyło się komunikatem NTP not supported. Usługę spoza listy, taką jak ntpsec, uruchamia się i zatrzymuje bezpośrednio przez systemctl.

timedatectl set-ntp false
Failed to set ntp: NTP not supported

Aby ustawić czas ręcznie, podaj datę i godzinę po set-time. To polecenie ustawia zegar sprzętowy razem z zegarem systemowym.

sudo timedatectl set-time '2026-10-28 20:00:00'

Na serwerze Debian 12 podanie wartości w złym formacie zakończyło się błędem bez zmiany czasu.

timedatectl set-time bad
Failed to parse time specification 'bad': Invalid argument

Aby na serwerze z chrony jednym ruchem skorygować mocno przesunięty zegar, używa się chronyc makestep.

sudo chronyc makestep

makestep porzuca resztę różnicy korygowanej stopniowo i od razu przestawia zegar systemowy o tę wartość. Oficjalna dokumentacja ostrzega, że nagła zmiana czasu może wpłynąć na część oprogramowania, więc używaj go tylko wtedy, gdy zegar odbiega za bardzo, by korygować go powoli.

🔢 FAQ & polecane treści

Usługi NTP, takie jak chrony i ntpsec, stale synchronizują zegar, więc uruchamianie rdate z crona prawie nigdy nie jest potrzebne. Na sprawdzanym serwerze AlmaLinux 9 rdate nie było zainstalowane i nie było go też na liście pakietów do instalacji. Repozytorium serwera Debian 12 miało pakiet rdate 1.11, ale nie był zainstalowany.

timesync-status to polecenie tylko dla systemd-timesyncd. Na serwerze AlmaLinux 9 z chrony i na serwerze Debian 12 z ntpsec w obu przypadkach kończyło się błędem Failed to query server. Na takich serwerach stan synchronizacji sprawdza się przez chronyc tracking lub ntpq -p.

Oficjalna dokumentacja wyjaśnia, że zegar sprzętowy w czasie lokalnym może sprawiać problemy przy zmianie strefy czasowej lub przejściu na czas letni. Dlatego zaleca w miarę możliwości trzymać go w UTC, a polecenie zmiany na UTC to sudo timedatectl set-local-rtc 0. Oba sprawdzane serwery miały no (UTC).

ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Prove your humanity: 3   +   2   =