如何在本地 IP 发生更改时运行脚本?

Rma*_*ano 15 scripts networking dhcp

在标记为重复之前:这与动态 DNS 或类似的东西无关

我知道每次网络上升时如何运行脚本;在目录中添加一个脚本是一件简单的事情,/etc/NetworkManager/dispatcher.d如下所示:

#!/bin/bash

IF=$1
STATUS=$2

case "$2" in
        up)
        logger -s "NM Script up $IF triggered"
        su rmano -c /home/romano/bin/myscript 
        ;;
        down)
        logger -s "NM Script down $IF triggered"
        ;;
        *)
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

就我而言,这myscript是一个非常简单的例子ifconfig -a > ~/Dropbox/myifconfig.txt——我使用它是因为我需要从大学的任何地方知道我的本地 IP,而且它会经常改变。

到目前为止一切顺利,系统运行正常。但不幸的是,这里的 DHCP 配置为有时会更改 IP,而不会关闭/打开接口。在这种情况下,脚本(逻辑上)不会运行,并且文件不会更新。

我无法使用 DynDNS 方法,因为更改发生在本地IP 中,而不是外部可见的 IP。

我可以轮询,只需将脚本放在 cron 中并每分钟执行一次,或者编写一个稍微复杂的脚本(...如果 IP 更改,则写入文件,否则什么都不做)并将其作为后台任务再次放置,但它不优雅。所以问题是:

当我的本地 IP 更改时,有什么方法可以触发脚本吗?

更新 1

我试图/etc/dhcp/dhclient-enter-hooks.d/根据现有的将脚本放入 中/etc/dhcp/dhclient-enter-hooks.d/resolvconf,但它不会被触发。我怀疑(需要确认)NM(网络管理器)正在自己进行dhcp协商,而没有调用dhcp命令......

小智 11

根据 NetmorkManager 的手册页,其中一个事件是

dhcp4-change
          The DHCPv4 lease has changed (renewed, rebound, etc).
Run Code Online (Sandbox Code Playgroud)

我认为你可以简单地改变

up) 
Run Code Online (Sandbox Code Playgroud)

dhcp4-change|up)
Run Code Online (Sandbox Code Playgroud)