Получение не может разрешить хост при керлинге зависимостей в 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 готов

но и блокирует процесс загрузки, если сеть недоступна!!!

Шаги:

  1. активироватьsystemdмодуль (обязательно)
      systemctl enable systemd-networkd-wait-online.service
  1. измените конфигурацию вашего сервиса
      [Unit]
...
After=systemd-networkd-wait-online.service
Requires=systemd-networkd-wait-online.service

Вариант 2

Перезапустите сценарий в случае сбоя и повторите попытку.

Шаги:

  1. Установите конфигурацию перезапуска для службы
      [Service]
...
Restart=on-failure
RestartSec=5
  1. Пример 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
Другие вопросы по тегам