Вопрос или проблема
При выполнении команды timedatectl
, чтобы проверить, синхронизированы ли мои системные часы через NTP, я получаю следующее:
~> timedatectl
Не удалось запросить сервер: Имя org.freedesktop.timedate1 не было предоставлено ни одним .service файлом
Служба systemd-timedated.service работала.
~> systemctl status systemd-timedated.service
● systemd-timedated.service - Служба времени и даты
Загружено: загружено (/usr/lib/systemd/system/systemd-timedated.service; статично; предустановка поставщика: включено)
Активно: неактивно (мертво)
Документация: man:systemd-timedated.service(8)
man:localtime(5)
https://www.freedesktop.org/wiki/Software/systemd/timedated
Mar 23 14:28:16 cm1sd systemd[1]: Запуск службы времени и даты...
Mar 23 14:28:16 cm1sd systemd[1]: Служба времени и даты запущена.
Mar 23 14:29:00 cm1sd systemd[1]: systemd-timedated.service: Успешно.
Искал в интернете, но не нашел ничего о сообщении об ошибке. Как я могу использовать systemd и timedatectl, чтобы синхронизировать мои системные часы с NTP-сервером? Также я заметил, что ничего в /etc/systemd/ не определяет, какой NTP-сервер использовать. Я на встроенной системе Linux, созданной с помощью Buildroot, версия systemd 244.5.
Если вы используете Active Directory / Centrify, вы можете попробовать перезагрузить сервер. Это то, что они нам предложили сделать, и это сработало для нас. Однако мне неясно, в чем истинная причина, и это не очень удовлетворительно, если это общий сервер, который нельзя перезагрузить по желанию.
systemd-timedated
— это служба, которая использует D-Bus для общения с клиентами, такими как команда timedatectl
. Команда systemctl cat systemd-timedated.service
должна включать BusName=org.freedesktop.timedate1
, что скажет systemd
, как отслеживать эту службу, назначить ей Type=dbus
и сделать ее зависимой от юнита dbus.socket
. Это также позволяет systemd
запускать службу «по запросу», когда кто-то делает запрос к ней на системном D-Bus.
Сообщение об ошибке указывает на то, что либо systemd
не смог запустить systemd-timedated
, когда timedatectl
его вызвал, либо существует какая-то проблема с системным D-Bus.
systemd-timedated
по сути представляет собой единый «интерфейс» для настройки системных часов, настройки часового пояса и запуска/остановки фактических служб синхронизации часов, таких как chronyd.service
, systemd-timesyncd.service
или ntp.service
. Вы можете определить порядок предпочтения, в котором systemd-timedated
ищет фактические службы синхронизации, задав переменную окружения в файле переопределений, например:
[Service]
Environment=SYSTEMD_TIMEDATED_NTP_SERVICES=chronyd.service:ntp.service:systemd-timesyncd.service
Вам все равно нужно будет настроить NTP-сервер, используя конфигурационные файлы той службы NTP, которую вы в конечном итоге используете, или настроить службы NTP, чтобы получить адрес NTP-сервера из ответа DHCP, если это применимо. systemd-timesyncd
делает это автоматически, если вы используете systemd-networkd
для настройки ваших сетевых интерфейсов; в противном случае вам может потребоваться настроить клиента DHCP для запроса адреса NTP-сервера и хранения этой информации в формате, полезном для службы(ей) NTP.
В встроенной системе, я думаю, минимизация системного D-Bus может быть допустимым выбором, в зависимости от назначения системы. Исключение несущественных интерфейсных служб, таких как systemd-timedated
, и полагание на классические командные инструменты могут являться частью этого. Так что, вы уверены, что systemd-timedated
должен работать?
Ответ или решение
Ошибка, которую вы получаете при запуске команды timedatectl
, указывает на проблему с общением между timedatectl
и сервисом systemd-timedated
. Текст ошибки «Failed to query server: The name org.freedesktop.timedate1 was not provided by any .service files» говорит о том, что systemd
не может найти необходимую службу в системе D-Bus для обработки запросов, связанных с временем и датой.
Причины возникновения ошибки
-
Служба
systemd-timedated
не запущена: Судя по выводу командыsystemctl status systemd-timedated.service
, служба неактивна (inactive) и была отмечена как завершенная (Succeeded), что указывает на то, что она была успешно выполнена, но не остается активной для дальнейшего взаимодействия. -
Проблемы с D-Bus: Если служба не может быть запущена на D-Bus, это может указывать на проблемы с самим D-Bus или с конфигурацией
systemd-timedated
. -
Недостаточная поддержка в образе системы: Если это встроенная операционная система, такая как Buildroot, возможно, что необходимые компоненты для полноценной работы
systemd-timedated
не включены.
Решения
Для решения этой проблемы попробуйте следующие шаги:
-
Проверьте статус и ожидания службы:
systemctl status systemd-timedated.service
Если она неактивна, попробуйте вручную запустить:
systemctl start systemd-timedated.service
-
Проверка конфигурации D-Bus:
Убедитесь, что D-Bus работает должным образом. Вы можете запустить:systemctl status dbus.service
Если D-Bus не работает, попробуйте его перезапустить:
systemctl restart dbus.service
-
Проверьте настройки
systemd-timedated
:
Выполните команду:systemctl cat systemd-timedated.service
Убедитесь, что в файле есть строка
BusName=org.freedesktop.timedate1
. Если её нет, это может быть причиной проблемы. -
Настройка NTP-синхронизации:
Для настройки NTP-синхронизации, выберите один из следующих NTP-сервисов:chrony
,ntp
илиsystemd-timesyncd
. Добавьте в файл переопределения настройки при помощи:sudo systemctl edit systemd-timedated.service
Добавьте следующее:
[Service] Environment=SYSTEMD_TIMEDATED_NTP_SERVICES=chronyd.service:ntp.service:systemd-timesyncd.service
Не забудьте также настроить сам сервис (например, файл конфигурации
chrony.conf
дляchronyd
). -
Проверка логов:
Если проблема продолжается, просмотрите системные журналы для выявления возможных ошибок:journalctl -xe
-
Перезагрузка системы (если это приемлемо):
В некоторых случаях, особенно если это сервер, под управлением Active Directory или Centrify, перезагрузка может помочь устранить временные проблемы с службами.
Заключение
Если ни одно из предложенных решений не работает, возможно, что вдобавок нужно проверить сборку вашего встроенного Linux через Buildroot. Убедитесь, что все необходимые пакеты для поддержки systemd
и NTP настроены и работают. Учитывайте, что встраиваемые системы могут иметь ограниченные ресурсы и возможности, а также учитывайте целесообразность использования systemd-timedated
в вашей конфигурации.