Curl

在 systemd 中捲曲依賴項時無法解析主機

  • July 8, 2021

我正在將 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'並捲曲退出,程式碼為 1。在 systemd 啟動時是否存在無法使用 dns 的問題?

對於 CoreOS,您將需要:

[Unit]
Requires=network-online.target

之間有區別network.target``network-online.targetnetwork-online.target是嘗試在 中執行網路掛載時引入的內容/etc/fstab,並且您的依賴需求更接近於此。使用它。

在我的情況下,這個答案有效https://unix.stackexchange.com/questions/353179/why-isnt-my-systemd-service-waiting-for-the-network/356189#356189

你有兩個選擇

變體 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. 帶有 curl 的範例 bash 腳本
#!/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

引用自:https://serverfault.com/questions/704911