Получение не может разрешить хост при керлинге зависимостей в systemd
Я использую CoreOS с cloud-init и пытаюсь свернуться для фланели. У меня есть файл модуля как таковой:
[Unit]
Description=Run flannel
Documentation=https://github.com/coreos/flannel
Requires=etcd2.service
After=etcd2.service
[Service]
ExecStartPre=/usr/bin/curl -L -o /opt/bin/flannel-0.5.1-linux-amd64.tar.gz -z /opt/bin/flannel-0.5.1-linux-amd64.tar.gz https://github.com/coreos/flannel/releases/download/v0.5.1/flannel-0.5.1-linux-amd64.tar.gz
ExecStartPre=/usr/bin/tar -C /opt/bin -xzvf /opt/bin/flannel-0.5.1-linux-amd64.tar.gz
ExecStartPre=/usr/bin/mv /opt/bin/flannel-0.5.1/flanneld /opt/bin/flanneld
ExecStartPre=/usr/bin/rm -rf /opt/bin/flannel-0.5.1
ExecStartPre=/usr/bin/rm -rf /opt/bin/flannel-0.5.1-linux-amd64.tar.gz
ExecStart=/opt/bin/flanneld
когда это идет, чтобы свернуться для фланели, я получаю cannot resolve host 'github.com'
и curl завершает работу с кодом 1. Есть ли какая-то проблема, когда я не могу использовать dns во время запуска systemd?
2 ответа
Для CoreOS вам понадобится:
[Unit]
Requires=network-online.target
Есть разница между network.target
а также network-online.target
, network-online.target
это то, что втягивается при попытке выполнить подключение к сети в /etc/fstab
и ваши потребности в зависимости ближе к этому. Чтобы использовать это.
ответ работаетВ моем случае этот
У вас есть два варианта
Вариант 1
дождитесь сети и DNS готов
но и блокирует процесс загрузки, если сеть недоступна!!!
Шаги:
- активировать
systemd
модуль (обязательно)
systemctl enable systemd-networkd-wait-online.service
- измените конфигурацию вашего сервиса
[Unit]
...
After=systemd-networkd-wait-online.service
Requires=systemd-networkd-wait-online.service
Вариант 2
Перезапустите сценарий в случае сбоя и повторите попытку.
Шаги:
- Установите конфигурацию перезапуска для службы
[Service]
...
Restart=on-failure
RestartSec=5
- Пример bash-скрипта с Curl
#!/bin/sh
STATUSCODE=$(curl --silent --output /dev/stderr --write-out "%{http_code}" https://webhook.example)
if test $STATUSCODE -ne 200; then
exit 1
fi
exit 0