【发布时间】:2016-06-14 14:51:23
【问题描述】:
我想在特定接口上的 IP 地址发生更改时触发服务。在 Linux(内核 3.19)上使用 systemd 实现此目标或其他我不知道的方法是否有目标?
该服务将用于向定义的进程发送信号。 Linux 在嵌入式系统上运行。
谢谢!
【问题讨论】:
标签: linux networking ip systemd
我想在特定接口上的 IP 地址发生更改时触发服务。在 Linux(内核 3.19)上使用 systemd 实现此目标或其他我不知道的方法是否有目标?
该服务将用于向定义的进程发送信号。 Linux 在嵌入式系统上运行。
谢谢!
【问题讨论】:
标签: linux networking ip systemd
因为您使用Systemd,您可能已经使用systemd-networkd 来管理您的设备,而不是依赖于第三方代码。
您可以使用结构化日志输出来获取当前 BOOD_ID 的最后 2 个 ADDRESS 字段。(遗憾的是,systemd-networkd 中没有地址更改通知机制):
→ sudo journalctl -F ADDRESS -u systemd-networkd -n 2
192.168.178.29
所以,如果只有一行输出,就没有地址变化。
【讨论】:
sudo journalctl -u systemd-networkd -o json-pretty 来检测该服务的日志输出。
StackOverflow 的其他问题有一个解决方案。就在这里: Detecting a change of IP address in Linux
我喜欢这段代码,它很简单,你只需要一个你需要的具有频率的 cron 工作(我做了一点改变):
#!/bin/bash
OLD_IP=`cat ip.txt`
NEW_IP=`/sbin/ifconfig | awk -F "[: ]+'{ print $4}'`
if [ $NEW_IP != OLD_IP ]; then
YOU_COMMAND <commands>
echo $NEW_IP > ip.txt
fi
exit 0
【讨论】: