skip to content
Skesov.pro

Как включить синхронизацию времени в современных Linux-системах

/ 3 min read

Всем привет. Проблема, из-за которой я написал эту инструкцию, заключается в том, что мне надоело видеть в интернете по данному запросу только статьи 10-летней давности. В них нет информации о том, зачем устанавливать и настраивать старый Chrony, если новый (относительно) systemd-timesyncd отлично справляется со своей задачей. Нет никакого смысла делать лишние телодвижения, тем более что он идёт из коробки во всех современных дистрибутивах (Ubuntu, Fedora, Arch, Manjaro, Debian) уже лет пять.

Собственно, перейдём к его настройке.

Для начала проверим, что сервис включён (enabled) и запущен. Для этого введём команду:

Terminal window
$ systemctl status systemd-timesyncd
systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2024-03-02 10:51:42 UTC; 3min 53s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 580 (systemd-timesyn)
Status: "Initial synchronization to time server 192.168.71.1:123 (192.168.71.1)."
Tasks: 2 (limit: 4558)
Memory: 1.5M
CPU: 42ms
CGroup: /system.slice/systemd-timesyncd.service
└─580 /lib/systemd/systemd-timesyncd

В выводе важны два момента: если вместо enabled указано disabled, значит, служба не добавлена в автозагрузку; а если вместо active (running) стоит что-то другое — сервис не запущен или упал с ошибкой.

Исправить это можно соответствующими командами:

Terminal window
# Включение автозапуска сервиса
sudo systemctl enable systemd-timesyncd
# Запуск сервиса
sudo systemctl start systemd-timesyncd

Далее введём команду timedatectl и посмотрим на состояние службы:

Terminal window
$ timedatectl
Local time: Sat 2024-03-02 11:10:56 UTC
Universal time: Sat 2024-03-02 11:10:56 UTC
RTC time: Sat 2024-03-02 11:10:56
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

В идеале ваш вывод должен быть таким же, как в примере выше. Нас интересуют строки System clock synchronized и NTP service.

Если NTP service находится в состоянии inactive, значит, автоматическая синхронизация выключена. Включите её командой и проверьте состояние снова:

Terminal window
sudo timedatectl set-ntp true

Если сервис NTP включён, но System clock synchronized показывает no, то дело, скорее всего, в том, что сервис не может достучаться до сервера точного времени. Проверить, что идёт не так, можно в логах командой:

Terminal window
journalctl -xeu systemd-timesyncd

В логах может быть указан сервер, до которого пытается достучаться timesyncd. Для проверки доступности порта сервера синхронизации используйте команду nc (netcat), подставив ваш сервер вместо ru.pool.ntp.org (123 — это порт NTP, работает через UDP):

Terminal window
$ nc -uvzw 3 ru.pool.ntp.org 123
Connection to ru.pool.ntp.org (162.159.200.123) 123 port [udp/ntp] succeeded!

Если сервер недоступен и это ваш промышленный контур, то проблема, скорее всего, в настройках сетевого экрана или файрвола машины, на которой вы работаете.

Для замены сервера обновлений нужно внести правки в файл /etc/systemd/timesyncd.conf.

Выглядит он следующим образом:

Terminal window
$ cat /etc/systemd/timesyncd.conf
[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

Строки, начинающиеся с #, считаются комментариями. В блок [Time] нужно вписать строку (например, с помощью vim или nano с правами sudo):

Terminal window
NTP=ru.pool.ntp.org

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

Вот список популярных серверов, которые чаще всего работают на внешних виртуальных машинах:

  • time.google.com
  • ru.pool.ntp.org
  • ntp0.NL.net
  • clock.isc.org
  • ntps1-1.cs.tu-berlin.de
  • ntp2.vniiftri.ru
  • ntp.ix.ru

После сохранения файла нужно перезапустить службу:

Terminal window
sudo systemctl restart systemd-timesyncd

Затем ещё раз проверьте командой timedatectl, что System clock synchronized: yes.

Если проблема всё ещё сохраняется, снова открывайте логи и разбирайтесь, почему нет доступа к серверу. Чаще всего это именно настройки сетевой безопасности, что может стать темой для отдельной статьи.

Спасибо за внимание!