linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Процессы и ресурсы/chrony-and-ntp

kb/processes ── Процессы и ресурсы ── intermediate

chrony и NTP - синхронизация времени

NTP - протокол синхронизации часов (точность ~миллисекунды через интернет). На современных Linux реализация - `chronyd` (default) или `systemd-timesyncd` (lightweight).

view as markdownaka: chronyd, chronyc, ntpd, systemd-timesyncd, ntp-pool

Зачем точное время

Расхождение часов в секундах ломает:

  • TLS-handshake - сертификаты валидируются по времени, ±5 минут от реальности и curl отдаёт certificate has expired.
  • Kerberos - допуск ±5 минут, дальше KRB_AP_ERR_SKEW.
  • Логи и трейсинг - ELK/Loki/Jaeger корреллируют события по timestamp'ам.
  • Базы и репликацию - Postgres physical replication, MongoDB causal consistency.
  • Систему файлов - make решает что пересобирать по mtime; cron ждёт конкретное время; systemd-timers плывут.

NTP - протокол

NTP (Network Time Protocol) - UDP/123. Иерархия серверов в стратумах:

Stratum 0  атомные часы / GPS / радиосигнал (не отвечают на NTP сами)
     ↓
Stratum 1  сервера прямо подключённые к stratum 0 (несколько штук в мире)
     ↓
Stratum 2  публичные сервера, синхронизированные со stratum 1
     ↓
Stratum 3  обычно - твой локальный NTP-сервер если он есть
     ↓
Stratum 4+ клиенты в твоей сети

Чем выше число - тем дальше от первоисточника. Stratum 16 = «не синхронизирован».

Источники для домашнего/офисного хоста:

  • pool.ntp.org - глобальный пул из тысяч серверов, DNS отдаёт случайных.
  • Дистрибутивные пулы: 0.fedora.pool.ntp.org, 0.debian.pool.ntp.org, 0.ubuntu.pool.ntp.org.
  • Свой внутренний сервер для большой сети - снижает нагрузку на публичные и работает в air-gapped окружении.

Три реализации NTP в Linux

РеализацияГде defaultОсобенности
chronyd (chrony)Fedora, RHEL, ArchПолноценный, работает с прерывистой сетью, может БЫТЬ сервером
systemd-timesyncdUbuntu desktop, минимальные образаТолько клиент (SNTP), один сервер, lightweight
ntpd (reference)редко на новых системахСтарая реализация, медленнее реагирует, deprecated

Запускать только одну. Если стоит chrony - systemctl disable --now systemd-timesyncd.

Проверить кто синхронизирует:

bash
timedatectl
# System clock synchronized: yes
# NTP service: active

Когда NTP service: active - какой-то демон работает, но какой именно определить через systemctl is-active chronyd systemd-timesyncd.

Конфиг chrony - /etc/chrony.conf (или /etc/chrony/chrony.conf)

Минимум для клиента:

pool 2.fedora.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync

Что значат ключевые директивы:

ДирективаНазначение
pool <host> iburstDNS-имя возвращает несколько серверов; iburst - быстрый initial-sync
server <host> iburstОдин конкретный сервер
server X.X.X.X preferПредпочитать этот источник если он работает
driftfile <path>Сохранять оценку drift'а кварца между перезагрузками
makestep 1.0 3Если расхождение > 1 сек - first 3 update'а делать прыжком, потом плавно
rtcsyncРаз в 11 минут синхронизировать RTC (hardware clock) с системными часами
allow 192.168.0.0/24Раздавать NTP клиентам из этой подсети (chrony как сервер)
local stratum 10Объявлять себя на stratum 10 если интернет недоступен (для air-gap)

Опция iburst - критичная: при старте делает 4 пакета подряд с интервалом 2 сек, синхронизация занимает секунды вместо минут.

Конфиг systemd-timesyncd

/etc/systemd/timesyncd.conf - простой:

ini
[Time]
NTP=time.cloudflare.com 0.pool.ntp.org
FallbackNTP=ntp.ubuntu.com
RootDistanceMaxSec=5

После правки - systemctl restart systemd-timesyncd. Проверка:

bash
timedatectl timesync-status

Дебаг - chronyc

bash
chronyc tracking
# Reference ID    : C0A80034 (yorktown.both.org)
# Stratum         : 3
# System time     : 0.000004870 seconds slow of NTP time   ← ключ
# Last offset     : -0.000007259 seconds
# Frequency       : 18715.217 ppm fast                     ← drift кварца
# Skew            : 0.087 ppm
# Leap status     : Normal

Главные индикаторы:

  • System time - насколько отстаёт/спешит. < 1 ms = всё хорошо. Секунды = плохо.
  • Stratum - твой стратум. Если 16 - не синхронизирован.
  • Leap status - Normal, или Insert/Delete в дни перед leap-second.

Список серверов:

bash
chronyc sources -v
# MS Name/IP address       Stratum Poll Reach LastRx Last sample
# ^* time.cloudflare.com         3   8   377   55     +418us[+430us] +/-   18ms

Расшифровка MS (Mode/State):

  • ^ - обычный сервер, = - peer.
  • * - выбран как best, + - комбинируется, - - отброшен, x - может ошибаться, ? - ещё не получили ответ.

Принудительно синхронизироваться сейчас:

bash
sudo chronyc makestep
# 200 OK

Использовать после правки конфига или когда хост проснулся после долгого sleep'а.

RTC - hardware clock

Hardware clock (RTC) - батарейка на плате, тикает и при выключенной системе. Системные часы (kernel) при boot читают RTC, а потом NTP их подкручивает.

bash
hwclock --show              # время в RTC
sudo hwclock --systohc      # записать system → RTC
sudo hwclock --hctosys      # прочитать RTC → system

В chrony rtcsync делает --systohc автоматически каждые 11 минут. Без него после reboot часы прыгнут до того что было в RTC.

Нюанс с двойной загрузкой Windows/Linux: Windows хранит в RTC локальное время, Linux - UTC. Если двойная загрузка и часы прыгают на величину timezone offset:

bash
sudo timedatectl set-local-rtc 1     # сказать Linux что RTC - local time

Сделать свой NTP-сервер

Если в офисе/дома десятки хостов - лучше один локальный сервер чем все в pool.ntp.org. В /etc/chrony.conf на сервере:

pool 2.fedora.pool.ntp.org iburst
allow 192.168.0.0/24                  # кому раздавать
rtcsync
driftfile /var/lib/chrony/drift

Плюс открыть UDP/123 в firewall'е. На клиентах:

server 192.168.0.10 iburst prefer

Stratum клиентов будет +1 от сервера.

Дебаг - почему время не синхронизируется

bash
systemctl status chronyd                        # запущен ли вообще
journalctl -u chronyd --since "10 min ago"      # последние сообщения
chronyc activity                                # сколько источников онлайн/offline
chronyc sources -v                              # видим ли что-то
# сетевая проверка
sudo nmap -sU -p 123 0.pool.ntp.org             # порт открыт?
sudo ss -ulnp 'sport = :123'                    # сами слушаем?

Типичные проблемы:

  • Все source'ы ? (не отвечают) - UDP/123 заблочен файрволом провайдера.
  • Reference ID: 00000000 () - не синхронизирован, идёт первичный sync, подождать минуту с iburst.
  • chronyd не стартует - конфликт с systemd-timesyncd. Отключить timesyncd.

§ команды

bash
timedatectl

Главный обзор: системное время, RTC, timezone, статус NTP-синхронизации

bash
chronyc tracking

Точная статистика синхронизации chrony - offset, drift, stratum, leap

bash
chronyc sources -v

Все NTP-источники с их статусом и временем последнего ответа

bash
sudo chronyc makestep

Принудительная синхронизация прыжком - после правки конфига или wake-up

bash
sudo timedatectl set-timezone Europe/Moscow

Сменить часовой пояс - обновляет /etc/localtime symlink

§ см. также

  • systemdsystemd - init и менеджер сервисовsystemd - init-система Linux: PID 1, который запускает всё остальное, следит за зависимостями, перезапускает упавшее, агрегирует логи.
  • systemd-resolvedsystemd-resolved - локальный DNS-stubsystemd-resolved - DNS stub-resolver, слушает на `127.0.0.53:53` и проксирует запросы на upstream-DNS, агрегируя данные от NetworkManager/DHCP/VPN. Управляется `resolvectl`.
  • cmd-systemctlsystemctl - управление сервисами systemd`systemctl` - главный CLI для управления unit'ами systemd: сервисами, таймерами, маунтами, сокетами. Замена SysV-init/`service` на современных дистро.
  • cmd-journalctljournalctl - журнал systemd`journalctl` читает binary-журнал systemd-journald. Это центральный лог системы: kernel, systemd-сервисы, syslog - всё через один интерфейс.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки