Когда я запрашиваю статус демона NTP с помощью команды, ntpdc -c sysinfo
я получаю следующий вывод:
system peer: 0.0.0.0
system peer mode: unspec
leap indicator: 11
stratum: 16
precision: -20
root distance: 0.00000 s
root dispersion: 12.77106 s
reference ID: [73.78.73.84]
reference time: 00000000.00000000 Thu, Feb 7 2036 7:28:16.000
system flags: auth monitor ntp kernel stats
jitter: 0.000000 s
stability: 0.000 ppm
broadcastdelay: 0.000000 s
authdelay: 0.000000 s
Это указывает на сбой синхронизации NTP. Однако системное время с точностью до 1 секунды. Когда я запускал свою систему без сетевого подключения в течение того же периода, что и сейчас, системное время отклонялось на ~ 10 с.
Такое поведение предполагает, что система имеет другой способ синхронизации времени. Я понял, что есть также systemd-timesyncd.service
(с файлом конфигурации в /etc/systemd/timesyncd.conf
) и timedatectl status
дает мне правильное время:
Local time: Thu 2016-08-25 10:55:23 CEST
Universal time: Thu 2016-08-25 08:55:23 UTC
RTC time: Thu 2016-08-25 08:55:22
Time zone: Europe/Berlin (CEST, +0200)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2016-03-27 01:59:59 CET
Sun 2016-03-27 03:00:00 CEST
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2016-10-30 02:59:59 CEST
Sun 2016-10-30 02:00:00 CET
Итак, мой вопрос: в чем разница между этими двумя механизмами? Один из них устарел? Могут ли они использоваться параллельно? Какой следует доверять, когда я хочу запросить статус синхронизации NTP?
(Обратите внимание, что у меня другая система (в другой сети), для которой оба метода указывают на успех и дают правильное время.)
Ответы:
systemd-timesyncd - это, по сути, небольшая клиентская реализация NTP, более или менее связанная с более новыми выпусками systemd. Он более легкий, чем полноценный ntpd, но поддерживает только синхронизацию времени - то есть он не может выступать в качестве NTP-сервера для других машин. Он предназначен для замены ntpd для клиентов.
Не следует использовать оба параллельно, так как теоретически они могут выбирать разные серверы времени, которые имеют небольшую задержку между ними, что приводит к тому, что ваши системные часы периодически «нервничают».
Чтобы получить статус, вам, к сожалению, нужно использовать,
ntpdc
если вы используете ntpd иtimedatectl
если вы используете timesyncd, я не знаю ни одной утилиты, которая могла бы читать оба.источник
systemd-timesyncd не применяет часовую дисциплину: часы не обучены и не скомпенсированы, а смещение внутренних часов с течением времени не уменьшается. Он имеет элементарную логику для настройки интервала опроса, но без дисциплины хост будет заканчиваться неравномерным временем навсегда, так как systemd-timesyncd толкает или тянет с любым интервалом, который, по его мнению, требует краткосрочный дрейф. Он также не может оценить качество удаленного источника времени. Вы вряд ли получите точность, превышающую 100 мс. Этого достаточно для простых конечных пользовательских устройств, таких как ноутбуки, но это может определенно вызвать проблемы для распределенных систем, которые требуют большей точности времени.
источник