我正在尝试为CentOS 7 netboot映像创build自定义networkingpipe理服务。 该服务获取主机上所有接口的列表,find具有物理连接的接口,然后使用它来获取DHCPconfiguration。
问题是要确保它在系统中存在所有networking设备之后启动,因此可以获取它们的列表。 这是我的单元文件:
[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证实了这一点。 但是,在启动过程中,无法在系统中find任何接口。 该列表是通过查看/sys/class/net目录创build的。 sys-subsystem-net-devices-<iface>.device单元稍后启动,我猜测它是填充该目录的。
networking设备单元在network.target之后启动似乎很奇怪。
所以问题是:如何使用systemd单元文件语法可靠地确定所有接口何时可用?
networking设备单元在network.target之后启动似乎很奇怪。
所以问题是:如何使用systemd单元文件语法可靠地确定所有接口何时可用?
这个问题的一部分由这个Unix SE线程回答。
基本上,根据network.target的文档 :
network.target只保证networking堆栈启动:
仅表示networkingpipe理堆栈到达后才启动。 到达时是否configuration了任何networking接口都是未定义的。
network-online.target
是一个目标,积极等待,直到nework“上”,其中“up”的定义是由networkingpipe理软件定义的。 通常它指示某种configuration的,可路由的IP地址。
所以你可能需要调整你的需求来反映这一点:我想你可能想运行你的脚本After=network.target ,但是Before=network-online.target 。