Systemd-networkd:DHCP 客户端获取新地址后运行脚本

ale*_*der 8 ubuntu dhcp systemd dyndns systemd-networkd

我在 ubuntu 18.04 服务器上。我需要运行一个更新 CloudFlare 上的 IP 地址的脚本(一种 DynDNS 脚本)。在以前的版本中,我可以使用接口 enp1s0 的 DHCLIENT 退出挂钩来执行此操作。

\n\n

但是,systemd 现在使用自己的内置 DHCP 客户端。如何编写一个 systemd 单元,在向 DCHP 客户端提供新 IP 地址后立即执行 bash 脚本?

\n\n

Systemd 正在管理接口 enp1s0:

\n\n
#sudo  systemctl status systemd-networkd\n\xe2\x97\x8f systemd-networkd.service - Network Service\n   Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled-runtime; vendor preset: enabled)\n   Active: active (running) since Tue 2018-09-18 01:54:16 +08; 10h ago\n     Docs: man:systemd-networkd.service(8)\n Main PID: 878 (systemd-network)\n   Status: "Processing requests..."\n    Tasks: 1 (limit: 4915)\n   CGroup: /system.slice/systemd-networkd.service\n           \xe2\x94\x94\xe2\x94\x80878 /lib/systemd/systemd-networkd\n\nSep 18 01:54:27 xxx systemd-networkd[878]: enp1s0: Configured\n
Run Code Online (Sandbox Code Playgroud)\n

meu*_*euh 2

我不知道有任何 systemd 解决方案,但您可以有效地监视接口的更改,并将ip monitor输出通过管道传输到脚本中,以查找您感兴趣的更改。例如,如果我这样做

$ ip monitor address dev enp3s0
Run Code Online (Sandbox Code Playgroud)

然后添加一个新的别名地址到接口 enp3s0 我得到了这一行

2: enp3s0    inet 192.168.77.77/24 brd 192.168.77.255 scope global enp3s0:1
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

我想您会看到类似的 dhcp 更改。

如果您愿意,可以编写一个 C 程序来执行相同的操作,请参阅此ipevent.c