有没有更好的方法可以确保在继续执行启动 init 脚本之前配置以太网端口?在 Ubuntu 上配置 802.3ad 绑定以太网时,需要一些时间才能完成协议协商并开始传递数据包,因为网络脚本只是配置,但不验证流量是否正在传递。因此,这可能会影响其他一些依赖网络的脚本,例如 drbd 的 init。现在,我在启动脚本中只有一个循环来 ping 网关,但这似乎不是最佳选择:
GATEWAYIP=10.0.0.1
while ( ! ping -c 1 $GATEWAYIP ); do
echo gateway not up
done
答案1
这是您在联网后使用 DRBD 的一个非常具体的用例。由于我没有太多的 DRBD 经验,我不确定它会尝试建立多快。也许您可以通过简单地检测 IP 何时绑定到接口而不是等待 ping 响应(这会增加延迟)来解决。
也许是这样的;
#!/bin/bash
# Fetch Interface
BONDED_INTERFACE=$(cat /proc/net/dev | grep 'bon' | awk -F: '{print $1}')
# Determine Network Status
if [ "$BONDED_INTERFACE" ]; then
BONDED_IP=$(/sbin/ifconfig ${BONDED_INTERFACE} | sed -n -e '/Bcast/p' | cut -d : -f 2 | awk '{print $1}')
while [ "${#BONDED_IP}" -le "0" ]; do
echo "No IP Present on The Interface";
BONDED_IP=$(/sbin/ifconfig ${BONDED_INTERFACE} | sed -n -e '/Bcast/p' | cut -d : -f 2 | awk '{print $1}')
done
echo "The Interface IP is: $BONDED_IP";
else
echo "No Bonded Interface Found";
fi
我认为,除了调试上述脚本之外,调用睡眠一段时间比回显其输出更有意义。
如果这仍然不是您想要的,也许需要在 NetworkManager 中执行某些操作,或者尝试检测链接状态(载波侦听)。希望我有所帮助。