Curl
在 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'
並捲曲退出,程式碼為 1。在 systemd 啟動時是否存在無法使用 dns 的問題?
對於 CoreOS,您將需要:
[Unit] Requires=network-online.target
和之間有區別
network.target``network-online.target
。network-online.target
是嘗試在 中執行網路掛載時引入的內容/etc/fstab
,並且您的依賴需求更接近於此。使用它。
在我的情況下,這個答案有效https://unix.stackexchange.com/questions/353179/why-isnt-my-systemd-service-waiting-for-the-network/356189#356189
你有兩個選擇
變體 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
- 帶有 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