![使用 systemd-networkd,在网络配置更改时执行操作](https://linux22.com/image/57343/%E4%BD%BF%E7%94%A8%20systemd-networkd%EF%BC%8C%E5%9C%A8%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE%E6%9B%B4%E6%94%B9%E6%97%B6%E6%89%A7%E8%A1%8C%E6%93%8D%E4%BD%9C.png)
我正在从 Debian 切换ifupdown
到Debian systemd-networkd
,它大部分工作正常。缺少的一点是,每次网络发生变化时,我都想打电话killall -ARLM tinc
,以便我的 VPN 及时启动。
是否systemd
或systemd-networkd
提供这样的功能?我该如何使用它?
答案1
我用来networkd-dispatcher
在界面状态更改后运行事件:
Networkd-dispatcher 是一个用于 systemd-networkd 连接状态更改的调度程序守护进程。该守护进程类似于 NetworkManager-dispatcher,但由于 systemd-networkd 的有限性质,它支持的事件类型受到更多限制。
链接到GitLab
答案2
Tinc 应该作为 systemd 单元进行更新,而不是直接发送信号。为了实现这一目标,需要将其单元文件配置为与该部分中适当的Require=
、Before=
、 和行链接。还要确保您为网络服务设置正确。 (即{ , , } 而不是)After=
[Unit]
WantedBy=
WantedBy=
network.target
network-online.target
network-pre.target
multi-user.target
这允许执行systemctl restart systemd-networkd.service
以重新启动您的网络。将此与systemd-resolvd
, udev
/ dbus
(加上[email protected]
Wi-Fi 时)结合起来,网络就可以正常工作了。
请务必阅读以下文章切换到 systemd-networkd和单位依赖性。这也是systemd.service
通过命令向您的单位发送信号的方法,systemctl kill
如文档中所述systemd 管理员指南
答案3
目前这是不可能的。但是,您只能用作systemd-networkd-wait-online.service
启动的依赖项来重新配置 tinc。根据我的经验,tinc 会对网络配置的变化做出快速反应。至少在Linux上它可以使用rtnetlink来监听接口的变化。