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