Certifikát, který se odmítá validovat, neuspořádané žurnály nebo úloha spuštěná o hodinu příliš brzy rychle obviní aplikaci. Začněte tím, že si přečtete hodiny stroje. Na VM nebo serveru systemd, timedatectl ukazuje časové pásmo, službu NTP a stav synchronizace před jakoukoli opravou.
Cílem je oddělit tři případy: okamžik UTC je chybný, časové pásmo zobrazuje špatný místní čas, nebo synchronizace sítě nefunguje. Každý případ vyžaduje jinou akci.
Čtení času, časového pásma a stavu NTP
Nejprve zjistěte místní čas, UTC a stav spravovaný systemd. Proveďte tuto kontrolu ze relace, která může zůstat otevřená, pokud bude potřeba změnit čas nebo časové pásmo.
date -Is
date -u -Is
timedatectl status
Výstup zobrazuje zejména Local time, Universal time, RTC time, Time zone, System clock synchronized a NTP service. Stroj nastavený na UTC může zobrazovat neočekávaný místní čas, přičemž správně ukazuje okamžik. Porovnejte tedy date -u -Is s některým známým referenčním zdrojem před tím, než obviníte časové pásmo.
Ve skriptu se vyhněte parsování výstupu status. Získejte užitečné vlastnosti:
timedatectl show -p Timezone -p LocalRTC -p NTP -p NTPSynchronized
Změna časového pásma bez posunutí hodin
Pokud je UTC konzistentní, ale místní čas není, nejprve zkontrolujte, zda očekávané časové pásmo existuje:
timedatectl list-timezones | grep -Fx 'Europe/Paris'
Následně aplikujte časové pásmo, pak znovu přečtěte jeho hodnotu a místní čas:
sudo timedatectl set-timezone Europe/Paris
timedatectl show -p Timezone --value
date -Is
Tento příkaz změní prezentaci okamžiku UTC, nevrací hodiny na čas. Zkontrolujte časovače a okna údržby po změně. Cron jako 15 2 * * * sleduje místní čas služby, zatímco časovač systemd může deklarovat své vlastní časové pásmo.
systemctl list-timers --all
Průvodce o časovačích systemd a jejich rozdílech s cronem pomáhá interpretovat tento seznam. Změna časového pásma nevyžaduje restart vzdáleného serveru.
Povolení NTP s jediným synchronizačním klientem
Před použitím timedatectl set-ntp true identifikujte již nainstalovaného klienta. Podle distribuce může být hodiny řízené systemd-timesyncd, Chrony nebo ntpd.
systemctl list-unit-files | grep -E '^(systemd-timesyncd|chrony|chronyd|ntp).service'
systemctl is-active systemd-timesyncd
systemctl is-active chrony
systemctl is-active chronyd
Nečinná služba neznamená, že je třeba spustit všechny ostatní. Udržujte pouze jednoho klienta NTP. Na stroji, který používá systemd-timesyncd, aktivujte synchronizaci a pak zkontrolujte její výsledek:
sudo timedatectl set-ntp true
timedatectl show -p NTPSynchronized --value
timedatectl show-timesync --all
journalctl -u systemd-timesyncd -b --no-pager
Vlastnost NTPSynchronized=yes potvrzuje, že systemd považuje hodiny za synchronizované. show-timesync také poskytuje zvolený server a známé parametry timesyncd. Pokud již Chrony řídí hodiny, použijte jeho nástroje místo opětovného aktivování timesyncd. Článek o Chrony na Linuxu pokrývá tento případ.
Vyhněte se manuální opravě na serveru
Nespouštějte timedatectl set-time, protože se žurnál zdá být posunutý. Ruční skok může narušit certifikáty, Kerberos, vypršení relací, zámky databáze a naplánované úlohy.
Také zkontrolujte, jak Linux interpretuje hardwarové hodiny:
timedatectl status
sudo hwclock --show
Linux obvykle uchovává hardwarové hodiny v UTC. Pokud RTC in local TZ je yes, zkontrolujte politiku pracovního místa před přechodem na UTC, zejména s duálním spuštěním Windows. Toto nastavení může posunout čas při příštím spuštění.
Po opravě znovu zkuste timedatectl status, následující provádění a posledních deset minut protokolu příslušné služby. Pokud okamžik, NTP a nové události souhlasí, aplikace obvykle nevyžaduje žádný restart.
Dokumentace timedatectl od systemd objasňuje chování set-ntp a dostupné vlastnosti v závislosti na nainstalované verzi.