timedatectl не удалось выполнить запрос к серверу

Вопрос или проблема

При выполнении команды 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 для обработки запросов, связанных с временем и датой.

Причины возникновения ошибки

  1. Служба systemd-timedated не запущена: Судя по выводу команды systemctl status systemd-timedated.service, служба неактивна (inactive) и была отмечена как завершенная (Succeeded), что указывает на то, что она была успешно выполнена, но не остается активной для дальнейшего взаимодействия.

  2. Проблемы с D-Bus: Если служба не может быть запущена на D-Bus, это может указывать на проблемы с самим D-Bus или с конфигурацией systemd-timedated.

  3. Недостаточная поддержка в образе системы: Если это встроенная операционная система, такая как Buildroot, возможно, что необходимые компоненты для полноценной работы systemd-timedated не включены.

Решения

Для решения этой проблемы попробуйте следующие шаги:

  1. Проверьте статус и ожидания службы:

    systemctl status systemd-timedated.service

    Если она неактивна, попробуйте вручную запустить:

    systemctl start systemd-timedated.service
  2. Проверка конфигурации D-Bus:
    Убедитесь, что D-Bus работает должным образом. Вы можете запустить:

    systemctl status dbus.service

    Если D-Bus не работает, попробуйте его перезапустить:

    systemctl restart dbus.service
  3. Проверьте настройки systemd-timedated:
    Выполните команду:

    systemctl cat systemd-timedated.service

    Убедитесь, что в файле есть строка BusName=org.freedesktop.timedate1. Если её нет, это может быть причиной проблемы.

  4. Настройка 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).

  5. Проверка логов:
    Если проблема продолжается, просмотрите системные журналы для выявления возможных ошибок:

    journalctl -xe
  6. Перезагрузка системы (если это приемлемо):
    В некоторых случаях, особенно если это сервер, под управлением Active Directory или Centrify, перезагрузка может помочь устранить временные проблемы с службами.

Заключение

Если ни одно из предложенных решений не работает, возможно, что вдобавок нужно проверить сборку вашего встроенного Linux через Buildroot. Убедитесь, что все необходимые пакеты для поддержки systemd и NTP настроены и работают. Учитывайте, что встраиваемые системы могут иметь ограниченные ресурсы и возможности, а также учитывайте целесообразность использования systemd-timedated в вашей конфигурации.

Оцените материал
Добавить комментарий

Капча загружается...