Debian
Debian systemd network-online.target 不工作?
我正在嘗試在 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
(由ifupdown
Ubuntu 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
在介面啟動後(至少)已到達。