Как написать службу systemd, чтобы обеспечить запуск после службы DNS?

После обновления до Kubuntu 19.04 я не знаю, как написать службу, чтобы она могла запускаться после инициализации службы DNS.

В этом прошлом я просто использую After=network.target, но сейчас это не работает. Я тоже пробовал After=network-online.target, но не повезло.

Так что я думаю, что проблема в том, systemd-resolvedКак я мог решить эту проблему?


Обновить:

ERROR: getaddrinfo: Temporary failure in name resolution
ERROR: failed to resolve the provided hostname

Это два связанных журнала. Таким образом, я могу подтвердить, что проблема связана со службой DNS.

2 ответа

Решение

Пожалуйста, добавьте зависимость в ваш сервисный файл:

After=nss-lookup.target

Это должно гарантировать, что поиск хоста / имени работает.

Более подробная информация содержится в документации: https://www.freedesktop.org/software/systemd/man/systemd.special.html

nss-lookup.target

Цель, которая должна использоваться в качестве точки синхронизации для всех поисков службы имен хостов / сетей. Обратите внимание, что это не зависит от поиска имени пользователя / группы UNIX, для которого следует использовать nss-user-lookup.target. Все сервисы, для которых необходимо наличие полного разрешения имени хоста / сети, должны быть упорядочены после этой цели, но не извлекать ее. Systemd автоматически добавляет зависимости типа After = для этого целевого модуля во все сервисные модули сценария инициализации SysV с LSB заголовок, ссылающийся на средство "$named".

Чтобы полностью дождаться сети, документация systemd https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ вам добавить к вашему сервису:

After=network-online.target
Wants=network-online.target

и подтвердить, что соответствующая служба ожидания включена:

$ systemctl is-enabled NetworkManager-wait-online.service systemd-networkd-wait-online.service
disabled
enabled

См. юнит-файл в конце этого... https://systemd.io/NETWORK_ONLINE/

IOW, чтобы отложить, пока ваша система не сможет разрешить DNS, вам нужно создать новый блок зависимостей для network-online, который фактически проверяет разрешение имен. Это не будет работать, если, например, система приостанавливается, поскольку зависимость network-online.target была удовлетворена до приостановки.

Лучше включить тест в ваше приложение.

Другие вопросы по тегам