【问题标题】:Detect IP-Address change on an interface检测接口上的 IP 地址更改
【发布时间】:2016-06-14 14:51:23
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: linux networking ip systemd


    【解决方案1】:

    因为您使用Systemd,您可能已经使用systemd-networkd 来管理您的设备,而不是依赖于第三方代码。

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

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

    所以,如果只有一行输出,就没有地址变化。

    【讨论】:

    • 不完全是我想要的,但我可以使用它,谢谢!
    • 顺便说一句,你怎么知道 ADDRESS 字段的名称?我无法在任何地方的文档中找到它...
    • 我使用sudo journalctl -u systemd-networkd -o json-pretty 来检测该服务的日志输出。
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2021-01-03
      • 2013-03-16
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2011-12-20
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多