ubuntu本身无法凭空唤醒关机状态的机器,必须依赖bios/uefi的rtc唤醒功能;需先用rtcwake -m no设置唤醒时间,再执行shutdown -h now,且bios中必须启用resume by alarm等对应选项。

定时关机用 cron 就够了,但唤醒必须靠硬件支持
Ubuntu 本身不能“凭空唤醒”关机状态的机器——关机后 CPU 断电,所有软件进程停止,cron、systemd 全部失效。真正能实现“定时唤醒”的,是主板 BIOS/UEFI 中的 RTC(实时时钟)唤醒功能,Linux 仅通过 rtcwake 命令向硬件发出指令。所以,先确认你的设备是否支持:sudo rtcwake -m mem -s 60(尝试休眠60秒后唤醒),若失败或报错 rtcwake: failed to set wakeup alarm,大概率 BIOS 里没开唤醒选项,或主板不支持。
rtcwake 的 -m 参数选错会导致唤醒失败
rtcwake 的 -m 参数决定系统进入哪种低功耗状态,不同状态对唤醒的支持程度差异很大:
-
-m mem:挂起到内存(Suspend to RAM),唤醒快、成功率高,但需保持通电;适合夜间短时休眠后唤醒 -
-m disk:挂起到磁盘(Hibernate),断电保存状态,唤醒慢但省电;部分主板对 hibernate 唤醒支持不稳定 -
-m on:仅设置 RTC 报警,不改变当前电源状态(即保持开机),常用于配合关机后的唤醒(需 BIOS 配合) -
-m no:只设置唤醒时间,不触发任何电源状态变更,专为关机后唤醒设计(依赖 BIOS 的 “Resume by Alarm” 功能)
绝大多数桌面/笔记本用户想实现“每天 23:55 自动开机”,必须用 -m no,且 BIOS 中开启 Resume by Alarm 或类似选项(名称因厂商而异,如 ASUS 叫 RTC Resume Timer,Dell 叫 Wake on RTC Alarm)。
关机 + 定时唤醒要分两步走,不能写成一条 cron 任务
很多人试图在 cron 里写 shutdown -h now && rtcwake -m no -l -t $(date +%s -d "tomorrow 06:00"),这是无效的——shutdown 执行后系统立刻断电,后续命令根本不会运行。正确做法是:
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 第一步:用
cron在目标唤醒时间前几分钟(比如提前 5 分钟)执行rtcwake设置唤醒点,再立即关机 - 第二步:关机命令必须跟在
rtcwake后面,且用&&连接,确保唤醒设置成功才关机
例如,每天 6:00 唤醒,就在 5:55 执行:
55 5 * * * /usr/bin/rtcwake -m no -l -t $(date -d "today 06:00" +%s) && /sbin/shutdown -h now
注意:date -d "today 06:00" 必须用 date 计算绝对时间戳,不能写死数字,否则跨天会出错;rtcwake 和 shutdown 都要用绝对路径。
BIOS 设置不生效?检查 /sys/class/rtc/rtc0/wakealarm
设置完 rtcwake 后,可直接查看硬件是否接收指令:
执行 cat /sys/class/rtc/rtc0/wakealarm,如果输出是 Unix 时间戳(如 1783459200),说明设置成功;如果输出为 0 或空白,说明 rtcwake 失败或 BIOS 未启用对应功能。此时不要反复重试,先进 BIOS 确认:Power Management Setup → Resume by Alarm → Enabled,并把 Alarm Date/Time 设为 Every Day 或留空(具体看主板说明)。有些品牌机(如 Lenovo 部分型号)还需关闭 Fast Boot 才能生效。










