如果网络接口关闭,则启动bash脚本以重新加载网络

时间:2014-07-09 19:52:59

标签: bash shell networking openwrt

我有几块电路板经常需要重启电源。大约百分之十的时间,网络接口无法启动(ifconfig不显示任何内容,r8169驱动程序无法加载等)。我试图找出根本原因,但同时需要快速解决。我写了一个快速bash脚本,它在启动时运行,通过ping本地接口检测接口是否关闭,然后在必要时重新加载网络。

相关代码部分:

echo 'fixnet running' > $NV_LOG

if ping -c 1 127.0.0.1; then
    echo "Network ok." >> $NV_LOG
else
    echo "$ERR Network down, starting up" >> $NV_LOG
    /etc/init.d/network restart
fi

如果我手动运行此脚本(./testNet.sh),它将按预期工作。但是,如果脚本在启动时运行,则在ping测试命令期间似乎失败(' fixnet running'输出到$ NV_LOG,但没有其他内容)。当网络接口关闭时会发生这种情况 - 如果网络启动正常,则此启动脚本也能正常工作。我是bash脚本的新手,并且不知道从哪里开始。

编辑:实际上看来,当电路板发生故障时,脚本根本不会执行。感谢您的解决方案,但问题出在其他地方。我将结束这个问题。

1 个答案:

答案 0 :(得分:1)

您可能因某种原因猜测ping命令卡住了。也许在路线解析? 顺便说一下,你ping 127.0.0.1 localhost 。据我所知,这是在内核级别进行过滤甚至无法到达网络堆栈。您确定这可以真正判断您的网络接口是否已启动?

无论如何,要测试接口是 UP 还是 DOWN ,您可能会依赖ip命令。它不会通过网络发送打包,而只是检查接口状态:

此处,检查我的 eth0 界面是启用还是关闭:

if ip addr show eth0 | grep 'state UP'; then
    echo "Network ok."
else
    echo "$ERR Network down, starting up"
    /etc/init.d/network restart
fi 2>&1 >> $NV_LOG

请注意我将整个 if语句重定向到日志文件。这样就可以捕获ip命令,消息和输出或/etc/init.d/network restart的输出。