我正在尝试为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
。