Ubuntu:等待网络链接并执行bash命令

时间:2014-07-03 07:55:39

标签: linux bash shell ubuntu networking

在Ubuntu(最新的发行版很好),我想重新启动一个路由器并在bash脚本中我想要一个等待网络链接重新启动的命令,当它检测到它时,它必须启动bash命令。

我可以使用某种轮询循环来实现它,但理想的解决方案是使用bash命令,在执行时等待链接启动并自动执行我给它的bash命令。 / p>

我读了一些关于dbus的东西(dbus似乎是要走的路),但似乎也需要花费太多时间才能完全理解如何正确使用它。我被建议检查像ethtool这样的工具是否能够做那种“等待和执行”但是在手册页中我没有找到任何关于它的信息。

注意:我忘了说我想要检查链接的PHYSICAL层是否已启动。因此,不接受在上层工作的解决方案。此外,不接受涉及将脚本放在目录中的解决方案(例如/ etc / network / if-up.d)。


有什么想法吗?

谢谢

3 个答案:

答案 0 :(得分:1)

我建议的事件监听器:

inotifywait -e modify /sys/class/net/eth0/carrier; echo 'Change detected'

当您插入或拔下网络电缆时,它会触发回声'检测到更改'当然它可以触发任何事情。

这将作为一个关闭,但我告诉你如何制作一个守护进程,如果不是,这将是一个很好的练习:)

答案 1 :(得分:0)

如果您想要命令检查链接是启动还是关闭,请使用ip

ip addr show eth0 | grep -Po "(?<=state ).*?(?=\s)"
DOWN

ip addr show wlan0 | grep -Po "(?<=state ).*?(?=\s)"
UP

答案 2 :(得分:0)

您可以通过/ sys / class / net / eth0 / carrier file检查链接是上/下链接

cat /sys/class/net/eth0/carrier

如果输出为1,则插入以太网电缆并且链接已启动。

如果输出为0,则删除以太网电缆并断开链接。

注意:如果你有其他接口,那么eth0然后替换eth2 / eth3之类的接口代替eth0