🐹 CentOS 7: Настройка синхронизация времени по Network Time Protocol. Утилита chrony.

Содержание:

1. Протокол сетевого времени: Network Time Protocol.

1.1. Установка программы.
1.2. Проверка работы программы.
1.3. Проверка синхронизации.
1.4. Источники синхронизации.
1.5. Настройка параметров.
1.6. Остановка работы программы.

2. Возможные ошибки и их устранение.

2.1. Проблема с Local/RTC временем.
2.2. Ошибка ручной синхронизации времени (timedatectl).
2.3. Ошибка: Operation not permitted.

3. Оригиналы источников информации.


1. Протокол сетевого времени: Network Time Protocol.

Chrony — это гибкая реализация протокола сетевого времени — Network Time Protocol (NTP). Используется для синхронизации системных часов с различных NTP-серверов, эталонных часов или с помощью ручного ввода.

Также можно его использовать как сервер NTPv4 для синхронизации времени других серверов в той же сети. Chrony предназначен для безупречной работы в различных условиях, таких как прерывистое сетевое подключение, перегруженные сети, изменение температуры, что может повлиять на отсчет времени в обычных компьютерах.

Chrony поставляется с двумя программами:

  • chronyc — интерфейс командной строки для службы Chrony;
  • chronyd — служба, которая может быть запущена во время загрузки системы.

1.1. Установка программы.

Внимание! В CentOS 7 данная утилита уже идет в комплекте даже при минимальной комплектации установщика. Устанавливать отдельно в CentOS 7 утилиту chrony не надо.

Для CentOS 8 из официальных репозиториев убрали ntp и ntpdate, поэтому для синхронизации времени нужно использовать chrony.

Основные преимущества chrony:

  • высокая скорость и точность синхронизации;
  • корректная работа при отсутствии доступа к эталонным часам (ntpd требуются регулярные запросы);
  • по умолчанию не меняет сразу время при синхронизации, чтобы не нарушить работу программ.

Проверим есть ли на нашем сервере автоматическая синхронизация — статус службы по обновлению времени через интернет.

Для этого можно использовать указанную выше команду timedatectl без параметров.

# timedatectl

В данном ответе CentOS 7 уже имеет синхронизацию и настроена корректно. Устанавливать утилиту chrony не надо.

Утилита timedatectl также позволяет изменить время:

# timedatectl set-time '2019-11-27 17:51:00'

Если по каким-либо причинам chrony у вас не установлена, то ответ будет такой, как на картинке-примере ниже. В этом случае для синхронизации времени нужно установить и использовать chrony.

# timedatectl

Если у вас она не стоит, что видно по скриншоту, то установим и настроим вручную:

# yum -y install chrony

Как и любой другой сервис, после установки chrony нужно включить и добавить в автозагрузку:

# systemctl start chronyd
# systemctl enable chronyd

1.2. Проверка работы программы.

Для проверки статуса chrony используется следующая команда.

# systemctl status chronyd

Проверяем, нормально ли запустился:

Все в порядке, сервис настроен и работает. После запуска он автоматически синхронизирует время. Теперь наши часы будут автоматически синхронизироваться с сервером времени в интернете.

# timedatectl status

1.3. Проверка синхронизации.

Чтобы проверить, синхронизирован ли chrony на самом деле. Как и у ntp, у chrony есть интерфейс командной строки chronyc. Мы будем использовать его программу командной строки chronyc, которая имеет опцию отслеживания для предоставления соответствующей информации.

# chronyc tracking

Перечисленные пункты содержат следующую информацию:

  • Reference ID — идентификатор и имя, с которым компьютер в настоящее время синхронизирован.
  • Stratum — количество переходов к компьютеру с установленными основными часами.
  • Ref time — это время по Гринвичу, в которое было выполнено последнее измерение из эталонного источника.
  • System time — задержка системных часов от синхронизированного сервера.
  • Last offset — расчетное смещение последнего обновления часов.
  • RMS offset — долгосрочное среднее арифметическое значения смещения.
  • Frequency — это частота, на которой часы системы будут работать неправильно, если хронограф не проведет коррекцию. Она выражена в ppm, то есть ч/м (частей на миллион).
  • Residual freq — остаточная частота указывает на разницу между измерениями от опорного источника и используемой в настоящее время частотой.
  • Skew — расчетная погрешность, связанная с погрешностью частоты.
  • Root delay — суммарная задержка сетевого пути к опорному серверу, с которым синхронизируется компьютер.
  • Leap status — это статус, который может иметь одно из следующих значений: нормальное, добавить второй, удалить второй или не синхронизироваться.

1.4. Источники синхронизации.

Чтобы проверить информацию об источниках chrony, можно выполнить следующую команду:

# chronyc sources

1.5. Настройка параметров.

Конфигурационный файл chrony/etc/chrony.conf. В нем нужно указать список NTP серверов, которые нужно использовать для синхронизации.

Конфигурационный файл chrony находится по адресу /etc/chrony.conf.

Пример конфигурационного файла может выглядеть примерно так:

# mcedit /etc/chrony.conf

chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

Приведенная выше конфигурация содержит следующую информацию:

  • server — данная директива описывает NTP-сервер, с которым необходимо синхронизироваться.
  • stratumweight — какую задержку следует добавить к источнику синхронизации для каждой группы. Значение по умолчанию: 0,0001.
  • driftfile — расположение и имя файла, содержащего данные смещения.
  • makestep — эта директива заставляет chrony постепенно корректировать любое смещение во времени путем снижения скорости или замедления хода часов по мере необходимости.
  • logdir — путь к файлу журнала chrony.

Если нужно немедленно перейти к настройке системных часов и игнорировать текущие настройки, воспользуйтесь следующей командой:

# chronyc makestep

3.6. Остановка работы программы.

Остановить работу сервиса можно вот такой обычной командой:

# systemctl stop chrony

Убрать из автозапуска этой командой:

# systemctl disable chrony

2. Возможные ошибки и их устранение.

2.1. Проблема с Local/RTC временем.

Необходимо, что бы Local/RTC время было одинаковым.

При выводе результатов работы команды timedatectl, к результату постоянно приписывается абзац:

# timedatectl

Что означает:

Внимание: система настроена на считывание времени RTC в локальном часовом поясе. Этот режим не может быть полностью поддержан. Это создаст различные проблемы с изменением часового пояса и переходом на летнее время. Время RTC никогда не обновляется, оно полагается на внешние средства для его поддержания.

Если оффлайн часы сильно убегают значит не выставлен машинный таймер. Будем чинить!

Переключимся на сохранение локального, а не глобального (UTC) времени в BIOS.

Нужно сделать:

# timedatectl set-local-rtc 1

Потом обновляем машинный таймер:

# hwclock --utc --systohc

И будет всё точно как швейцарские часы!

Проверить успешность переключения этой же командой без параметров:

# timedatectl

Как видно предупреждение исчезло!

2.2. Ошибка ручной синхронизации времени (timedatectl).

Аналогичная ошибка может возникать и при работе с утилитой timedatectl:

# timedatectl set-time '2019-11-27 17:51:00'

Теперь нужно отключить автоматическую синхронизацию в самой утилите timedatectl:

# timedatectl set-ntp 0

И выполнить команду по установке конкретного времени:

# timedatectl set-time '2019-11-27 17:51:00'

Проверим результат:

# timedatectl

Всё стало хорошо!

2.3. Ошибка: Operation not permitted.

Так при ручной синхронизации, часто бывают ошибки вида:

28 Nov 10:12:39 ntpdate[897482]: sendto(185.217.191.98): Operation not permitted

В этом случае проверьте правила firewalld или iptables, и убедитесь, что у вас на сервере открыт UDP порт 123. Так же некоторые хосты синхронизации могут быть недоступны в момент проверки.

3. Оригиналы источников информации.

  1. serveradmin.ru «CentOS 7 и 8 настройка сервера после установки» от 18.10.2019.
  2. blog.sedicomm.com «Синхронизация времени в Linux с NTP: Как установить и использовать Chrony».
  3. chrony.tuxfamily.org «c h r o n y».
  4. archlinux.org.ru «[РЕШЕНО] Проблема с Local/RTC time на Арче».
  5. megazuz.livejournal.com «Локальное время в BIOS в LinuxMint / Ubuntu».

Читайте также: