Современные системы выдвигают совершенно иные требования к точному времени, чем могут обеспечить аппаратные часы компьютера. На время завязаны службы криптографии и аутентификации, системы контроля доступа и видеонаблюдения, финансовые системы и кассовые узлы. Поэтому важно, чтобы время на всех узлах инфраструктуры было не только точным, но и одинаковым. А при работе распределенных структур также требуется правильно настроить часовые пояса. В Linux это можно сделать разными способами, но зачем, если есть штатное решение на базе systemd-timesyncd.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
У многих администраторов существует предвзятое отношение к systemd, хотя следует признать, что именно systemd сделал работу с системой проще и доступнее. И, тем более, бессмысленно отрицать то, что сегодня systemd - это фактически отраслевой стандарт, применяемый всеми ведущими дистрибутивами.
Еще более глупо игнорировать стандартные инструменты systemd, предназначенные для решения прикладных задач, одной из которых является синхронизация времени. Но, как показывает практика, не все администраторы знают о такой возможности и часто пытаются решить эту задачу при помощи стороннего ПО.
Во многих современных дистрибутивах systemd-timesyncd обычно уже работает из коробки и настроен на синхронизацию с собственными серверами времени. Выяснить это несложно, сначала узнаем статус службы:
systemctl status systemd-timesyncd
А затем можем уточнить текущее состояние синхронизации часов:
timedatectl status
Как можно увидеть из вывода первой команды служба синхронизации работает и включена ее автозагрузка, ниже, в строках лога видно, что выполнена синхронизация с одним из серверов debian.pool,ntp.org. Вторая команда показывает текущее время, часовой пояс, а также то, что синхронизация с помощью systemd-timesyncd включена.
Важный момент, если у вас в системе установлено стороннее ПО, такое как ntpd, openntp, chrony, то systemd-timesyncd будет автоматически отключен, для его использования вам потребуется удалить сторонние пакеты для синхронизации времени.
Чтобы включить использование systemd-timesyncd для синхронизации времени следует выполнить команду:
timedatectl set-ntp true
А для добавления службы в автозагрузку, вместе с одновременным запуском, выполните:
systemctl enable --now systemd-timesyncd
А теперь перейдем к тонкой настройке службы, для этого откроем ее конфигурационный файл /etc/systemd/timesyncd.conf, он очень прост, нам следует раскомментировать и заполнить следующие две опции:
NTP = 192.168.111.101 192.168.111.102
FallbackNTP = 0.ru.pool.ntp.org 1.ru.pool.ntp.org
Опция NTP содержит список серверов (IP или FQDN) с которыми следует выполнять синхронизацию, в нашем случае мы указали некие локальные сервера времени, если указанные узлы недоступны, то служба попытается выполнить синхронизацию с серверами, перечисленными в опции FallbackNTP.
Но есть еще один тонкий момент. Если компьютер получает адрес NTP-сервера через DHCP, то он будет иметь наивысший приоритет и использоваться для синхронизации в первую очередь, в случае его недоступности будет выполняться синхронизация с серверами, указанными в директиве NTP, а если недоступны и они, тогда в действие вступят сервера из FallbackNTP.
Таким образом можно построить многоуровневую систему синхронизации времени и быть уверенным, что узел откуда-нибудь, но подведет свои часы.
После внесения изменений в конфигурационный файл не забудьте перезапустить службу:
systemctl restart systemd-timesyncd
Также systemd-timesyncd позволяет легко работать с датой/временем и часовым поясом. Допустим нам по какой-то причине потребовалось изменить системное время на произвольное. Все очень просто. Прежде всего выключим синхронизацию:
timedatectl set-ntp false
Затем установим нужную дату и время командой:
timedatectl set-time "2022-07-06 23:00:00"
Для того, чтобы вернуться к синхронизированному времени еще раз выполните:
timedatectl set-ntp true
Нужно изменить часовой пояс? Тоже нет никаких проблем, сначала получим список всех поясов:
timedatectl list-timezones
Для пролистывания списка используйте пробел. После того, как вы нашли название нужного вам часового пояса выполните:
timedatectl set-timezone Asia/Yekaterinburg
И тут же проверим, что часы перевелись:
timedatectl status
Как видим, systemd-timesyncd предоставляет простые, но эффективные инструменты для синхронизации времени и каждый системный администратор должен уметь с ними работать вне зависимости от своего личного отношения к systemd.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Последние комментарии