我正在调查 Linux 服务器(CentOS7.9 内核 5.4.179-1.el7.elrepo.x86_64)是否存在一个奇怪的问题:有一个非常正常的服务:
# /etc/systemd/system/test.service
[Unit]
Description=tet
Before=frr.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/test.sh
[Install]
WantedBy=multi-user.target
test.sh 只是配置网络,例如(简化的伪代码)
show nic name by mac
它输出现代网卡名称,例如enp1s0f0
,而不是旧式名称eth1
等,该服务在所有其他服务器上运行良好。
但似乎有一天输出了一个旧式的网卡名称,例如eth1
,但我无法追溯到那个时间找到相关日志。
我确实从dmesg找到了网卡重命名日志,例如
[Fri Sep 15 00:38:24 2023] bnxt_en 0000:01:00.1 eth1: Broadcom BCM57414 NetXtreme-E 10Gb/25Gb Ethernet found at mem 4000200000, node addr 11:11:11:11:11:11
[Fri Sep 15 00:38:24 2023] bnxt_en 0000:01:00.1 enp1s0f1: renamed from eth1
所以我猜测网卡名称有可能是eth1。
我想知道即使在 multi-user.target 开始之后,网卡重命名也可能发生吗?(multi-user.target 是大多数服务所附加的)
网卡重命名发生在systemd-udevd.service中,它启动得比较早,但它不断监听硬件事件,因此看起来网卡出现的速度可能比预期慢,并且即使在test.service开始后也可能被重命名。
如果这是真的,那么似乎我必须使用
udevadm settle
确保没有挂起的 udev 事件,因此可以自动等待 nic 重命名。