【问题标题】:Linux: execute a command when network connection is restoredLinux:恢复网络连接时执行命令
【发布时间】:2015-04-13 20:51:36
【问题描述】:

我有一个通过以太网电缆连接到路由器的 linux 盒子。 电缆永远不会被拔掉,linux 盒子总是开着的。 我的目标是每次重启路由器时在 linux 机器上执行一个命令。

这个问题与this question 非常相似,但建议的解决方案似乎不起作用。 更具体地说:

  • 命令 inotifywait -e modify /sys/class/net/eth0/carrier; echo 'Change detected' 永远不会检测到变化(即使在电缆从电脑上拔下的情况下),因为根据this answer 命令inotifywait/sys 中不起作用
  • 命令(建议在评论中)inotifywait -e modify /etc/network/if-up.d/avahi-daemon 在路由器重新启动时未检测到任何更改

【问题讨论】:

  • 超级用户可能会更好地帮助您..投票搬到那里
  • 如何将问题移至超级用户?
  • 这是什么原因?是否要检查您的外部 IP 是否已更改?
  • 实际上,这个问题属于unix.SE,我很想看到精彩的社区会为这个问题提供答案。
  • @Ixer:原因是pc运行了vpn客户端:当路由器宕机再启动时我想自动重启vpn连接(路由器每晚关闭并打开每天早上,电脑一直开着)

标签: linux bash


【解决方案1】:

您可以在 linux 机器连接后使用 up 启动脚本 (需要安装ifplugd

 #/etc/network/interfaces
auto eth0
    iface eth0 inet dhcp
    up /etc/network/yourscript.sh

但是,请记住,如果您断开电缆(并在一段时间后插入),即使路由器可能尚未重新启动,脚本也会启动。

--编辑--

或者,将您的脚本放入

/etc/network/if-up.d/ (确保它是可执行的并在更改后重新启动网络。)

【讨论】:

  • @Ixer:我已经尝试过只使用“up”,但它没有用。也许“post-up”是正确的:我会试一试
  • 由于某种原因,它也不能在我的 ubuntu 机器上运行,尽管这曾经是正确的方法。 (我责怪'networkmanager',这很糟糕。wicd 有更好的脚本选项)。试着把你的脚本放在/etc/network/if-up.d/
  • 如果接口在/etc/network/interfaces,则不被NetworkManager管理(重启网管后)。根据我的实验,updown 脚本只有在接口由ifup/ifdown 管理时才会触发。我已经能够安装ifplug 守护进程。我会测试几天看看它是否有效。
  • @Ixer:看起来它可以工作,前提是 ifplug 守护进程已安装并管理 eth0。所以,如果你编辑你的答案添加这个(并将post-up更改为简单的up,那么我会接受你的答案
【解决方案2】:

根据路由器上的 Linux 发行版,在启动/重启时运行命令的正确方法是创建启动脚本,或将命令添加到 /etc/rc.local

【讨论】:

  • 将命令添加到 /etc/rc.local 是最简单的方法 - 这是在提供登录提示之前在所有运行级别中运行的最后一件事。
  • 如果它是一个简单的路由器,很可能无法访问它。目标是在 linux 机器上执行命令,而不是在路由器本身上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 2013-11-18
  • 2016-06-12
  • 2021-08-19
  • 2016-03-05
  • 1970-01-01
相关资源
最近更新 更多