"ip link", "ip addr" 및 "ip Route" 명령을 실행하기 전에 eth0 인터페이스를 어떻게 기다리나요?

"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 *

답변1

eth0상태를 확인 /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

답변2

이것이 문제에 대한 나의 최종 해결책입니다.

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개의 "시작" 예약 작업이 있고 시작 시 일부 오류가 발생합니다. 이 문제를 해결하기 위해 이 작업을 다른 작업이 선행 작업으로 포함되도록 구성했습니다. 즉, 작업은 순서대로 실행되어 새 작업을 시작하기 전에 이전 작업이 완료될 때까지 기다립니다.

관련 정보