Принудительно заставить 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-сервером?

Ответы:


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-пакеты были заблокированы корпоративным брандмауэром.


Установка другой службы синхронизации времени также была моей первой идеей, но это только обходной путь. Я искал реальное решение. Это ты отвечаешь. Оно работает. Спасибо :-)
— Инго
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.