Linux
如何在執行“ip link”、“ip addr”和“ip route”命令之前等待 eth0 介面?
我有以下腳本,需要在啟動時在 Synology NAS 上執行。Synology NAS 具有內置的計劃任務,能夠在啟動時觸發任務。
我需要執行的腳本是這樣的:
#!/bin/sh ip link add macvlan0 link eth0 type macvlan mode bridge ip addr add 192.168.0.240/32 dev macvlan0 ip link set macvlan0 up ip route add 192.168.0.240/28 dev macvlan0
但是,這不起作用,當
eth0
介面尚未準備好接受這些命令時,任務似乎很快就會觸發。
sleep 60
在所有ip *
命令之前放置一個,可以解決問題。但是在做我的事情之前等待任意幾秒鐘是不對的。鑑於我的上述要求,等待
eth0
介面可用以便我可以執行ip *
命令的最佳方法是什麼?
檢查
eth0
from的狀態/sys/class/net/eth0/operstate
並等待網路介面啟動:while ! [ "$(cat /sys/class/net/eth0/operstate)" = "up" ] do echo "waiting for eth0 to be up" sleep 2 done ip link add macvlan0 link eth0 type macvlan mode bridge ip addr add 192.168.0.240/32 dev macvlan0 ip link set macvlan0 up ip route add 192.168.0.240/28 dev macvlan0
這是我最終解決我的問題的解決方案:
while ! ip link show eth0 | grep -q 'state UP'; do sleep 1 done ip link add macvlan0 link eth0 type macvlan mode bridge ip addr add 192.168.0.240/32 dev macvlan0 ip link set macvlan0 up ip route add 192.168.0.240/28 dev macvlan0
但是,我的 Synology 上有 2 個“啟動”計劃任務,並且在啟動時遇到了一些錯誤。為了解決這個問題,我將此任務配置為將另一個任務作為前置任務。換句話說,任務按順序執行,等待前一個任務完成後再開始新的任務。