Debian

Debian systemd network-online.target 不工作?

  • June 22, 2020

我正在嘗試在 Debian Jessie 上創建一個 systemd 服務。我需要它在network-online.target到達後開始。

問題是network-online.target同時觸發network.target,當時我的介面尚未配置,剛剛開始 DHCP 查詢。

看起來這個問題是 Debian 特有的,因為它使用舊的網路配置。

如何繞過這個問題或如何使network-online.target工作?

由於您使用的是/etc/network/interfaces,因此您需要一個 systemd 服務來監控每個介面的狀態。檢查是否有/lib/systemd/system/ifup-wait-all-auto.service(由ifupdownUbuntu 15.04 中的軟體包安裝)。如果沒有,則創建/etc/systemd/system/ifup-wait-all-auto.service並粘貼以下內容:

[Unit]
Description=Wait for all "auto" /etc/network/interfaces to be up for network-online.target
Documentation=man:interfaces(5) man:ifup(8)
DefaultDependencies=no
After=local-fs.target
Before=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutStartSec=2min
ExecStart=/bin/sh -ec '\
 for i in $(ifquery --list --exclude lo --allow auto); do INTERFACES="$INTERFACES$i "; done; \
 [ -n "$INTERFACES" ] || exit 0; \
 while ! ifquery --state $INTERFACES >/dev/null; do sleep 1; done; \
 for i in $INTERFACES; do while [ -e /run/network/ifup-$i.pid ]; do sleep 0.2; done; done'

[Install]
WantedBy=network-online.target

這是 Ubuntu 15.04 系統上存在的服務文件,但[Install]添加了該部分以使事情變得更容易一些。我希望Ubuntu 15.04 中的行為與Debian Jessie 中ifup的行為相同。ifup如果沒有,則需要進行一些修改(尤其是最後一行)。

然後,執行sudo systemctl enable ifup-wait-all-auto.service。重新啟動電腦後,您應該看到network-online.target在介面啟動後(至少)已到達。

引用自:https://unix.stackexchange.com/questions/209832