Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
启动bash脚本以在网络接口关闭时重新加载网络_Bash_Shell_Networking_Openwrt - Fatal编程技术网

启动bash脚本以在网络接口关闭时重新加载网络

启动bash脚本以在网络接口关闭时重新加载网络,bash,shell,networking,openwrt,Bash,Shell,Networking,Openwrt,我有几个板,经常需要电源循环。大约有10%的情况下,网络接口无法启动(ifconfig没有显示任何内容,r8169驱动程序无法加载,等等)。我正试图找出根本原因,但同时需要一个快速修复。我编写了一个快速bash脚本,在启动时运行,通过ping本地接口来检测接口是否关闭,然后在必要时重新加载网络 相关代码部分: echo 'fixnet running' > $NV_LOG if ping -c 1 127.0.0.1; then echo "Network ok." >&g

我有几个板,经常需要电源循环。大约有10%的情况下,网络接口无法启动(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脚本还不熟悉,不知道从这里开始该怎么做


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

您可以猜到
ping
命令由于某种原因被卡住了。也许在路线决议? 顺便说一句,您将ping 127.0.0.1,这是localhost。据我所知,这是在内核级别过滤的,甚至不能到达网络堆栈。你确定这真的能告诉你的网络接口是否正常吗

无论如何,要测试一个接口是向上还是向下,您可以使用
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

提供二进制文件的完整路径。(即,
/bin/ping-c 1 127.0.0.1
)我不同意该语句,即,如果“if”语句失败,它不会做任何事情,那么它肯定会关闭echo$ERR网络,启动同一日志文件中的行。。。看起来,ping命令从未向IF语句返回任何结果,因此,除了“fixnet running”非常有用的脚本之外,日志中没有任何输出!