systemd:在启动过程中何时创建网络接口设备

systemd:在启动过程中何时创建网络接口设备

我正在尝试为CentOS 7网络启动映像创建自定义网络管理服务。该服务获取主机上所有接口的列表,找到具有物理连接的接口,然后使用它来提取 DHCP 配置。

问题在于确保它在系统上存在所有网络设备后启动,以便它可以获取它们的列表。这是我的单元文件:

[Unit]
Description=Configure networking
Wants=network.target
After=network-pre.target
Before=network.target multi-user.target

[Service]
ExecStart=/usr/local/bin/netboot-cfg
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

如您所见,它在network-pre目标之后和network目标之前运行。我用 确认了这一点systemd-analyze plot。但是,在启动过程中,它无法在系统上找到任何接口。列表是通过查看目录创建的/sys/class/net。这些sys-subsystem-net-devices-<iface>.device单元稍后启动,我猜它们会填充该目录。

网络设备单元在之后启动,这对我来说似乎很奇怪network.target

所以问题是:如何使用 systemd 单元文件语法可靠地确定所有接口何时可用?

答案1

网络设备单元在 network.target 之后启动,这对我来说似乎很奇怪。

所以问题是:如何使用 systemd 单元文件语法可靠地确定所有接口何时可用?

这个问题的部分答案是这个 Unix SE 线程

基本上,根据network.target 的文档

  • network.target 仅保证网络堆栈已启动:

    仅表示到达网络管理堆栈后已启动。到达时是否已配置任何网络接口尚未定义。

  • 网络在线.目标

    是主动等待网络“启动”的目标,其中“启动”的定义由网络管理软件定义。通常它表示某种已配置的、可路由的 IP 地址。

因此您可能需要调整您的要求以反映这一点:我想您可能想要运行您的脚本After=network.target,但是Before=network-online.target

相关内容