住宅机器定时休眠省电自动唤醒AI推理服务配置指南
家里的AI推理服务器(比如跑本地大模型或视频分析的设备)如果24小时开着,电费是真肉疼。
把它配置成白天跑任务、晚上自动休眠,早上再自己醒过来,既省电又不用天天手动开关机。
本文就用最直白的步骤,把定时休眠和自动唤醒给你安排上。
动手前确认这几点
先看看硬软件支持情况:
- 主板支持 RTC 唤醒:大部分近几年的台式机/工控板 BIOS 里都有“Wake on RTC”选项,有的叫“Resume by Alarm”。如果找不到,可以改用网络唤醒(WOL)。
- 网卡支持 WOL:大多数板载千兆网卡都行,用
ethtool可以确认。 - 系统:本文以 Ubuntu 22.04/24.04 为例,Debian 和其他发行版通用。
- AI 服务:假设你的推理服务已经配好(比如 Ollama、LocalAI、TensorRT),能开机自启动。
开启网络唤醒并测试休眠
先确保网卡在休眠后还能收唤醒包。
登录系统,打开终端执行:
# 查看网卡名称,通常是 eth0 或 enpXsY
ip link
# 以 enp3s0 为例,用 ethtool 查看当前唤醒设置
sudo ethtool enp3s0 | grep -i wake
如果输出里有 Supports Wake-on: pumbg 和 Wake-on: d(d 表示禁用),那就启用它:
sudo ethtool -s enp3s0 wol g
然后让设置生效(不同发行版方法不同,这里用 systemd 单元持久化):
sudo systemctl edit --full wol.service
粘贴以下单元内容:
[Unit]
Description=Enable Wake-on-LAN
[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s enp3s0 wol g
[Install]
WantedBy=basic.target
保存后启用:
sudo systemctl enable --now wol.service
测试一次休眠:
sudo systemctl suspend
机器会进入睡眠状态。
然后从另一台设备发魔术包唤醒(需要知道这台机器的 MAC 地址):
# 用 wakeonlan 工具,在局域网另一台机器上执行
wakeonlan XX:XX:XX:XX:XX:XX
如果机器成功唤醒,说明 WOL 可用。
设置定时休眠与自动唤醒
休眠用 systemctl suspend,自动唤醒用 rtcwake。rtcwake 可以设定在指定时间后自动唤醒(基于 RTC 时钟)。
我们来写一个 crontab 任务:
crontab -e
加入以下两条(假设你希望每天 23:00 休眠,早上 7:00 唤醒):
# 每天晚上 23:00 休眠并设定 8 小时后唤醒(7:00)
0 23 * * * /usr/sbin/rtcwake -m mem -s 28800 && sudo systemctl suspend
# 或者直接用 -m no 只设定唤醒闹钟,不立即休眠(下面会详细介绍)
-m mem 表示挂起到内存(休眠),-s 28800 是秒数(8小时)。
但注意:rtcwake -m mem 本身就执行了挂起操作,不用再跟 systemctl suspend。
更稳妥的做法是:
0 23 * * * /usr/sbin/rtcwake -m no -s 28800 && sudo systemctl suspend
但 -m no 只设置闹钟,不挂起,然后再 systemctl suspend 挂起。
不过有些系统在挂起后 rtcwake 的闹钟可能被覆盖,推荐直接用:
sudo rtcwake -m mem -s 28800
这条命令会设定一个 28800 秒后的唤醒闹钟,然后立即进入休眠状态。
把上面这条加到 crontab 中:
0 23 * * * /usr/sbin/rtcwake -m mem -s 28800
注意:rtcwake 需要 root 权限,crontab 里默认用 root 运行(使用 sudo crontab -e)。
或者用 sudo crontab -e 编辑 root 的 crontab。
让 AI 推理服务随系统启动
自动唤醒后,AI 服务得自己跑起来。
如果你用的 systemd 服务(比如 ollama 或自定义服务),确保已经 enable:
sudo systemctl enable ollama
sudo systemctl enable your-ai-service
这样机器一唤醒,服务就自动启动。
你也可以写个脚本在唤醒后做点额外检查(比如验证 GPU 是否正常)。
避坑指南
- 休眠后网卡断电:有些主板在 S3 休眠时会切断网卡电源,导致 WOL 失效。解决方法:进 BIOS 找“Wake on LAN from S3/S5”之类的选项,或者“ErP Ready”设为 Disabled。
- rtcwake 时区问题:
rtcwake默认使用硬件时钟(RTC),如果你的 RTC 是 UTC 而系统时间用本地时区,算秒数时要小心。简单做法:统一用 UTC 或都用本地时间。也可以不设秒数,改用-t指定绝对时间戳。 - crontab 环境变量:cron 执行环境可能没有
/usr/sbin等路径,建议在命令里写绝对路径:/usr/sbin/rtcwake。 - 多次休眠唤醒导致 RTC 闹钟残留:如果中途手动唤醒过,可能旧的闹钟还在。可以用
sudo rtcwake -m disable清除闹钟,再重新设置。
效果验证与能耗估算
完成配置后,先别急着重启。
手动执行一次 sudo rtcwake -m mem -s 60,机器会休眠 60 秒后自动唤醒。
等它自己醒来后,登录系统检查日志:
dmesg | grep rtcwake
dmesg | grep PM: suspend
systemctl status ollama
没问题的话,等晚上 crontab 自动执行。
第二天早上看机器是不是已经在运行了。
省多少电? 一个 150W 的推理主机,休眠时功耗通常降到 3-5W。
每天休眠 8 小时,一年能省约 (150-5)×8×365 / 1000 ≈ 423 度电,按 0.5 元/度算就是 211 元。
省下的钱加块内存不香吗?
遇到唤醒失败的情况,优先检查 BIOS 的 RTC 唤醒选项是否开启,以及网卡是否保持供电。
也欢迎你在评论区留下你的主板型号,大家一起踩坑排雷。