Ubuntu 网络唤醒配置后关机自动重启问题排查记录

技术专业 · 昨天


背景

家里有一台装了 Ubuntu 的 GPU 服务器(hostname: gpu-nvdia),平时配置了网络唤醒(WOL),需要跑大模型时远程发 magic packet 唤醒,用完后 SSH 执行关机。

最近出现了一个奇怪的问题:执行关机命令后,机器成功关机,但大约十几秒钟后会自动重新启动。


排查过程

第一步:确认关机命令本身没问题

远程 SSH 执行关机时,有一个常见坑:SSH 断开时 shutdown 进程被 SIGHUP 信号中断,导致关机流程没走完。

改用以下方式确保关机进程不受 SSH 断开影响:

bash

sudo systemd-run --on-active=5 systemctl poweroff

执行后机器确实正常关机了,但十几秒后仍然自动重启。说明问题不在关机命令本身。

第二步:查看启动日志和唤醒设备

查看 ACPI 唤醒设备列表和启动记录:

bash

sudo journalctl -b 0 | grep -iE "wake|wol|acpi|power|pme"
cat /proc/acpi/wakeup
last -x | head -30

last -x 可以看到,今天的两次关机都在约 1 分钟内自动重启:

shutdown system down  Fri Apr 17 20:55 - 20:56  (00:01)
shutdown system down  Fri Apr 17 20:30 - 20:31  (00:01)

而 4 月 6 日之前的记录关机都是正常的。

/proc/acpi/wakeup 的输出中,注意到以下设备处于 enabled 状态:

PXSX      S4    *enabled   pci:0000:05:00.0   ← 可疑
XHCI      S4    *enabled   pci:0000:00:14.0   ← USB 控制器
AWAC      S4    *enabled   platform:ACPI000E:00

第三步:排查 RTC 定时唤醒

AWAC 是 ACPI 实时时钟,enabled 状态意味着可能有定时唤醒。先查:

bash

cat /sys/class/rtc/rtc0/wakealarm

输出为空,排除 RTC 定时唤醒。

第四步:查看可疑 PCI 设备

查看 0000:05:00.0 是什么设备:

bash

lspci -v -s 0000:05:00.0

输出:

05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411
        Kernel driver in use: r8169

是网卡。再查网卡的 WOL 状态:

bash

ethtool enp5s0 | grep -i wake

输出:

Supports Wake-on: pumbg
Wake-on: g

找到根因了。


根本原因

网卡 WOL 开启(Wake-on: g,即 magic packet 模式),同时网卡对应的 ACPI power/wakeup 也处于 enabled 状态。

这两个条件叠加,导致机器关机后,局域网内其他设备(路由器、NAS、Mac Mini 等)发出的普通网络广播包也能触发唤醒,而不仅仅是 magic packet。

关机十几秒后重启,正好是局域网广播的时间窗口。


解决方案

WOL 的 magic packet 唤醒是在网卡固件层处理的,不依赖 ACPI 的 power/wakeup。因此可以禁用 ACPI 层面的网卡唤醒权限,同时保留 magic packet 唤醒能力。

临时禁用(当前生效):

bash

echo disabled | sudo tee /sys/bus/pci/devices/0000:05:00.0/power/wakeup
sudo ethtool -s enp5s0 wol g

持久化(重启后仍然生效):

创建 systemd service:

bash

sudo nano /etc/systemd/system/disable-pcie-wakeup.service

写入以下内容:

ini

[Unit]
Description=Disable PCIe ACPI wakeup for NIC
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo disabled > /sys/bus/pci/devices/0000:05:00.0/power/wakeup'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

启用服务:

bash

sudo systemctl enable disable-pcie-wakeup.service
sudo systemctl start disable-pcie-wakeup.service

总结

现象根因
关机后十几秒自动重启网卡 ACPI power/wakeup 为 enabled,局域网广播触发唤醒
WOL 功能仍然正常magic packet 唤醒由网卡固件处理,不依赖 ACPI 唤醒权限

关键命令速查:

bash

# 查看网卡 WOL 状态
ethtool enp5s0 | grep -i wake

# 查看 ACPI 唤醒设备
cat /proc/acpi/wakeup

# 查看 RTC 定时唤醒
cat /sys/class/rtc/rtc0/wakealarm

# 禁用网卡 ACPI 唤醒
echo disabled | sudo tee /sys/bus/pci/devices/0000:05:00.0/power/wakeup

记录于 2026-04-17,适用于同类 WOL + 自动重启问题的排查参考。

Theme Jasmine by Kent Liao