Time & date
Первоначальная реализация NTP — это ntpd. Затем к ней присоединились две более новых, chronyd и systemd-timesyncd.
Chrony — это реализация NTP, содержащая две программы: демон chronyd и интерфейс командной строки под названием chronyc.
Ещё раз: NTP — это протокол, который может быть реализован на хосте Linux с использованием Chrony или systemd-timesyncd.
1. Посмотреть текущую дату и время на хосте
#date
Пн фев 6 10:17:54 MSK 2023
2.Статус службы timedatectl
#timedatectl status
Local time: Пн 2023-02-06 10:18:51 MSK
Universal time: Пн 2023-02-06 07:18:51 UTC
RTC time: Пн 2023-02-06 07:18:51
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no
3.Служба времени chronyc
Конфиг службы хранится в /etc/chrony.conf
Обратить внимание! Если вы настроили chrony и разница со временем между хостом и ntp большая, то chrony будет постепенно уменьшать отставание, а не сразу поставит текущую дату и время. В зависимости от настроек, это может быть достаточно большой промежуток времени (более часа).
Статус службы
#systemctl status chronyd
Подробно...
#chronyc tracking
Reference ID : 0AFDFEEC (n5001-dc06.dpc.tax.nalog.ru)
Stratum : 4 # часовой пояс
Ref time (UTC) : Mon Feb 06 07:14:15 2023 # текущая дата и время
System time : 21.000545152 seconds slow of NTP time # текущее отставание/опережение времени сервера ntp (в данном примере около 21 сек)
Last offset : -0.000103954 seconds
RMS offset : 0.000323931 seconds
Frequency : 12.286 ppm slow
Residual freq : +0.004 ppm
Skew : 0.144 ppm
Root delay : 0.001781477 seconds
Root dispersion : 0.105637044 seconds
Update interval : 64.7 seconds
Leap status : Normal
Какие источники используются для синхронизации: chronyc sources
#chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ n7701dc04> 4 6 377 28 -107us[ +265us] +/- 137ms # сервер с + будет использоваться, если не доступен сервер по-умолчанию
^* n7701dc05> 4 6 377 21 -838us[ -465us] +/- 131ms # сервер со * используется сейчас по-умолчанию
Пример конфига chrony.conf
#vi /etc/chrony/chrony.conf
pool 10.253.254.236 iburst
pool 10.253.254.235 iburst
pool 10.253.254.234 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
4. Состояния служб на старых серверах
#service ntpd status
ntpd is running...
На старых ОС настройки ntp серверов указываются в файле /etc/ntp.conf
#systemctl status systemd-timesyncd
systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; disabled; vendor preset: enabled)
Drop-In: /usr/lib/systemd/system/systemd-timesyncd.service.d
└─disable-with-time-daemon.conf
Active: inactive (dead)
Docs: man:systemd-timesyncd.service(8)
Посмотреть и задать часовой пояс
#date - посмотреть текущую дату и часовой пояс
#timedatectl status - посмотреть текущие системные настройки даты и часового пояса
#timedatectl list-timezones - посмотреть доступные часовые пояса (либо ls /usr/share/zoneinfo/ )
#timedatectl set-timezone Europe/Moscow - задать часовой пояс
Настройка времени если две ОС, которые по разному хранят время
Если у Вас установлено две ОС на одном хосте, которые по разному хранят время, то неизбежно с этим будут проблемы.
Так, например, Windows хранит аппаратное (в BIOS) время с учетом текущей зоны, так называемое localtime, т.е. если у Вас часовой пояс +3, то и время в BIOS Windows будет хранить +3. ОС на основе Linux как правило хранят время в BIOS как UTC и уже программно прибавляют текущий часовой пояс.
Наиболее првильное решение считается хранение времени в UTC.
Решение вопроса в Windows (выполняем в консоли):
Включаем хранение времени в Windows по UTC
>Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1 - для 32-х битных систем
>Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1 - для 64-х битных систем
Для возрата в исходное хранение (localtime) необходимо это значение изменить на 0.
Переключение в Linux
#timedatectl set-local-rtc 1 --adjust-system-clock - хранить в localtime
#timedatectl set-local-rtc 0 - хранить в UTC (по-умолчанию)