Как написать службу 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 была удовлетворена до приостановки.
Лучше включить тест в ваше приложение.