检测接口上的 IP 地址更改

Detect IP-Address change on an interface

我想在特定接口上的 IP 地址发生更改时触发服务。在 Linux(内核 3.19)上使用 systemd 是否有这个或我不知道的其他方法的目标?

该服务将用于向定义的进程发送 SIGNAL。 Linux 在嵌入式系统上是 运行。

谢谢!

Whosebug 的其他问题中有解决方案。就在这里: Detecting a change of IP address in Linux

我喜欢这段代码,它很简单,你只需要一个频率为你需要的 cron 作业(我做了一点改动):

#!/bin/bash
OLD_IP=`cat ip.txt`
NEW_IP=`/sbin/ifconfig  | awk -F "[: ]+'{ print }'`
if [ $NEW_IP != OLD_IP ]; then
    YOU_COMMAND <commands> 
    echo $NEW_IP > ip.txt
fi
exit 0

因为您使用 Systemd you might already use systemd-networkd 来管理您的设备,而不是依赖第 3 方代码。

您可以使用结构化日志输出来获取当前 BOOD_ID 的最后 2 ADDRESS 字段。(遗憾的是,没有通知机制systemd-networkd 中的地址更改):

→ sudo journalctl -F ADDRESS -u systemd-networkd -n 2
192.168.178.29

因此,如果只有一行输出,则没有地址变化。