我在ubuntu18.04服务器上。我需要运行一个在CloudFlare (某种DynDNS脚本)上更新IP地址的脚本。在以前的版本中,我可以使用接口enp1s0的DHCLIENT出口挂钩来实现这一点。
但是,systemd现在使用自己的内置DHCP客户端。一旦向DCHP客户端提供了新的IP地址,我如何编写执行bash脚本的系统单元?
Systemd正在管理接口enp1s0:
#sudo systemctl status systemd-networkd
● systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled-runtime; vendor preset: enabled)
Active: active (running) since Tue 2018-09-18 01:54:16 +08; 10h ago
Docs: man:systemd-networkd.service(8)
Main PID: 878 (systemd-network)
Status: "Processing requests..."
Tasks: 1 (limit: 4915)
CGroup: /system.slice/systemd-networkd.service
└─878 /lib/systemd/systemd-networkd
Sep 18 01:54:27 xxx systemd-networkd[878]: enp1s0: Configured发布于 2018-09-18 15:01:22
我不知道任何systemd解决方案,但是您可以使用ip monitor有效地监视对接口的更改,并将输出输送到一个脚本中,以查找您感兴趣的更改。例如,如果我做了
$ ip monitor address dev enp3s0然后向接口enp3s0添加一个新的别名地址,我得到行
2: enp3s0 inet 192.168.77.77/24 brd 192.168.77.255 scope global enp3s0:1
valid_lft forever preferred_lft forever我想你会看到类似的dhcp变化。
如果您愿意,可以编写一个C程序来进行同样的操作,请参阅此ipevent.c。
发布于 2018-10-14 01:01:43
许多软件包不适用于systemd-networkd ..。目前还没有。(参见启动板上的bug报告)
目前,ISC客户端(dhclient)仍然占主导地位,特别是在许多ISP的DHCP服务器所需的自定义DHCP选项中(我正在关注您,Juniper ),以及支持操作系统脚本。
因此,转到/etc/systemd/network编辑处理动态IP寻址和禁用systemd的DHCP的配置文件如下:
[Match]
Name=eth1
[Network]
# Using ISC DHCP client (dhclient) instead of systemd-networkd
# Better support of DHCP-Options and OS-specific script supports
DHCP=no然后确保ISC客户端(dhclient)在/etc/network/interfaces中的如下内容:
auto eth0
iface eth0 inet dhcp对于/etc/dhcp/dhclient.conf:
send host-name "Wireless_Broadband_Router";
send domain-name "home";
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, time-servers, log-servers,
default-ip-ttl, dhcp-requested-address, dhcp-lease-time,
dhcp-server-identifier,dhcp-parameter-request-list,
vendor-class-identifier,dhcp-client-identifier,
www-server,
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn,
dhcp6.sntp-servers,
interface-mtu,
ntp-servers;最后一步是让systemd将ISC DHCP客户端作为守护进程启动。在/etc/systemd/system/dhclient@.service中创建文件。
# cat /etc/systemd/system/dhclient@.service
[Unit]
Description=dhclient on %I
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
[Service]
# ExecStart=/sbin/dhclient -4 -q %I
ExecStart=/sbin/dhclient -4 -v -pf /run/dhclient.%I.pid -lf /var/lib/dhcp/dhclient.%I.leases %I
[Install]
WantedBy=multi-user.target并通过从shell执行以下操作,使systemd守护进程可以使用ISC DHCP客户端:
sudo systemctl daemon-reload #makes the dhclient@.service available
sudo systemctl enable dhclient@eth0.service
sudo systemctl start dhclient@eth0.service发布于 2019-02-25 14:28:30
看看网络调度员。它是一个守护进程,它在各种网络事件上运行来自/etc/networkd-dispatcher/*.d的脚本。有关事件的详细信息通过环境变量传递给脚本。
https://unix.stackexchange.com/questions/469716
复制相似问题