在Ubuntu(最新的发行版很好),我想重新启动一个路由器并在bash脚本中我想要一个等待网络链接重新启动的命令,当它检测到它时,它必须启动bash命令。
我可以使用某种轮询循环来实现它,但理想的解决方案是使用bash命令,在执行时等待链接启动并自动执行我给它的bash命令。 / p>
我读了一些关于dbus的东西(dbus似乎是要走的路),但似乎也需要花费太多时间才能完全理解如何正确使用它。我被建议检查像ethtool这样的工具是否能够做那种“等待和执行”但是在手册页中我没有找到任何关于它的信息。
注意:我忘了说我想要检查链接的PHYSICAL层是否已启动。因此,不接受在上层工作的解决方案。此外,不接受涉及将脚本放在目录中的解决方案(例如/ etc / network / if-up.d)。
有什么想法吗?
谢谢
答案 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