Принудительно заставить systemd timesyncd синхронизировать время с NTP-сервером

16

Я настроил systemd timesyncd для получения времени от NTP-сервера:

/etc/systemd/timesyncd.conf > NTP=ca.pool.ntp.org
systemctl restart systemd-timesyncd.service 
timedatectl set-ntp true

Статус следующий:

$ timedatectl status
...
Network time on: yes
NTP synchronized: no

Как видно из вывода, время еще не синхронизировано. Может кто-нибудь помочь мне со следующими вопросами?

  • Сколько времени займет синхронизация timeyncd с NTP? Через какие интервалы он это делает, где я могу их проверить и изменить?
  • В срочных случаях: Могу ли я установить время только вручную или я могу принудительно синхронизировать timesyncd с NTP-сервером?
manifestor
источник

Ответы:

10

Чтобы использовать фактическую реализацию NTP, вам нужно установить и настроить ее, chronyили, может быть ntpd. Сделайте это, если вам требуется какой-либо мониторинг производительности времени. Я приму хронию.

Добавьте iburstв ваш poolили server строки в вашей конфигурации, чтобы ускорить начальные несколько пакетов. Все еще может занять пару минут, чтобы стабилизироваться, наберитесь терпения.

chronyc trackingпокажет текущее смещение. Представьте себе, каковы ваши требования, с точностью до секунды можно легко выдержать смещение в десятки миллисекунд.

chronyc makestepсделает текущую настройку немедленно. Обычно не нужно.


timesyncdявляется клиентом SNTP, который может устанавливать время, но не дисциплинировать его постепенно и непрерывно, ни фильтровать удаленный NTP-сервер по качеству . (Он также не может общаться с оборудованием времени или PTP, только с протоколом NTP.) Немного лучше, чем повторяется ntpdate, под этим я подразумеваю не очень хорошие часы. Лично я заменяю его на большинстве серверов.

О единственном способе , чтобы установить время с timesyncd вручную: timedatectl set-time "2019-01-15 00:40:16". Он не имеет надежных средств для дисциплины и контроля часов. Базовая статистика NTP через timedatectl timesync-status- относительно новая вещь, я не думаю, что эта опция доступна в Red Hat 7 или Ubuntu 18.04.

systemd определяет «syncronized», если NTP когда-либо использовался, чтобы сообщать Linux о настройке часов. В частности, если вызов дисциплины ядра вызовите adjtimex () без ошибок, а не начальное состояние. Смотрите исходный код, systemd / src / basic / time-util.c.

Джон Маховальд
источник
Спасибо за ваш ответ, Джон. Так на самом деле я могу отключить systemd-timesyncd и использовать только chrony? Я не совсем уверен, что понимаю, почему systemd имеет опцию NTP и называется timeSYNCd, если он не может синхронизировать время на самом деле? «Systemd определяет« syncronized », как если бы дисциплина ядра NTP вызывала adjtimex () без ошибок, а не начальное состояние, - это мне не очень понятно.
манифестатор
1
@chevallier systemd-timesyncd очень прост, и этого достаточно для наиболее распространенных случаев, например, сервера с часами реального времени, которые, как ожидается, будут работать в сети 24x7. Ваш случай не распространен, поэтому вы, вероятно, не должны его использовать. chrony гораздо лучше справляется с прерываниями сетевого подключения и отключением на длительные периоды (например, с ноутбука) или вообще без RTC (например, со встроенными устройствами).
Майкл Хэмптон
1
timesyncd - это клиент SNTP, поэтому он устанавливает время, не применяя его должным образом. Что хорошо для грубых требований к точности. Если вы хотите измерить производительность по времени или дождаться синхронизации, используйте полный NTP, например, chrony или ntpd.
Джон
11

Без установки дополнительных пакетов ... Выключите NTP, вручную установите достаточно близкое время , снова включите NTP:

Установить службу NTP неактивной

$ timedatectl set-ntp false

Установите время вручную

Да, это печально, но это работает, и вам не нужно возиться с установкой чего-либо и заставить это работать. Получите приблизительное местное время от настенных часов, вашего телефона, интернета. Это не должно быть идеально, потому что мы включим NTP через мгновение ...

$ sudo timedatectl set-time "2019-06-22 13:41:00"

Активировать службу NTP

$ sudo timedatectl set-ntp true

Подождите

john@mybox:~$ timedatectl
               Local time: Sat 2019-06-22 13:49:53 AEST
           Universal time: Sat 2019-06-22 03:49:53 UTC
                 RTC time: Sat 2019-06-22 03:49:54
                Time zone: Australia/Sydney (AEST, +1000)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

«Синхронизация системных часов: нет» изменится на «да», если он настроен достаточно, чтобы считаться «синхронизированным».

Поиск неисправностей

$ cat /etc/systemd/timesyncd.conf
[Time]
NTP=pool.ntp.org

$ timedatectl timesync-status
       Server: 13.210.208.89 (au.pool.ntp.org)
Poll interval: 8min 32s (min: 32s; max 34min 8s)
 Packet count: 0

$ grep systemd-timesyncd /var/log/syslog | tail
Jun 22 14:13:09 meebox systemd-timesyncd[8333]: Timed out waiting for reply from 103.214.220.220:123 (au.pool.ntp.org).

Мои ntp-пакеты были заблокированы корпоративным брандмауэром.

Джон Ми
источник
Установка другой службы синхронизации времени также была моей первой идеей, но это только обходной путь. Я искал реальное решение. Это ты отвечаешь. Оно работает. Спасибо :-)
Инго