<p>最常用方法是用crontab设置每天23:00关机:需执行sudo crontab -e,添加“0 23 * /sbin/shutdown -h now”,使用root权限和绝对路径确保生效。</p>

用 crontab 设置每天固定时间关机(最常用)
绝大多数用户需要的“每天23:00自动关机”,crontab 是最稳定、最可控的方式。它不依赖桌面环境,即使你用的是 Ubuntu Server 或远程 SSH 连接,也能正常工作。
常见错误现象:添加了任务但没生效;执行时提示 Permission denied;关机时间不准。
- 必须用
sudo crontab -e编辑 root 的 crontab,普通用户 crontab 无权调用/sbin/shutdown - 时间格式严格:例如每天 23:00 关机,写成
0 23 * * *,不是23:00或23 0 - 命令必须用绝对路径:
/sbin/shutdown -h now,不能只写shutdown—— cron 环境里$PATH很窄 - 如果想留缓冲时间(比如先通知再关),可用
/sbin/shutdown -h +2 "即将关机",但注意:这种延迟关机仍能被sudo shutdown -c取消;而 cron 触发的now不可取消,只能删 crontab 行
shutdown 命令临时关机(适合单次或调试)
如果你只是今晚 23:30 关一次机,或者想测试关机流程是否正常,shutdown 比配置 cron 更快,也更易撤销。
常见错误现象:“shutdown -h 23:30” 执行后立刻关机;或提示 “Failed to set timer”;或关机前没广播通知。
-
sudo shutdown -h 23:30是正确写法,注意中间**不能有空格**,也不能加冒号以外的字符 - 如果系统时间不准(比如 BIOS 时间偏移),关机时间会偏差——建议先运行
sudo timedatectl status确认System clock synchronized: yes - 用
sudo shutdown -c可随时取消,但仅对尚未触发的shutdown有效;已到点触发的无法拦截 - 避免用
-f或-n参数,它们跳过正常关机流程,可能损坏 ext4 日志或未刷盘的数据库数据
图形界面设置自动关机(仅限 GNOME 桌面)
Ubuntu 桌面版自带的“电源”设置里有个“自动关机”开关,但它**不是真正意义上的定时关机**,而是“闲置一段时间后关机”,容易被误判。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
使用场景:你希望电脑在没人操作 30 分钟后自动关机,而不是每天固定时刻关机。
- 路径是:Settings → Power → Automatic Suspend → Off,然后找 “Power Off When Inactive For”(不同版本位置略有差异)
- 这个功能由
gnome-session管理,依赖屏幕锁定和用户活动检测;一旦你开着下载器、播放视频或 SSH 远程连接,它就认为“正在活跃”,不会触发 - 它不写入系统级计划任务,也不影响其他用户会话;关机前通常不弹窗提醒,直接黑屏
- 如果你想要“每天 23:00 关机”,别选这个——它做不到精确到小时的调度
为什么不用 systemd timer?
虽然 systemd 提供了更现代的定时机制(.timer + .service),但在关机这类简单任务上,它反而增加复杂度,且容易因 unit 依赖关系失败。
性能与兼容性影响:Ubuntu 22.04+ 默认启用 systemd,但 crontab 依然默认开机自启、稳定运行;而一个自定义的 shutdown timer 需要手动 enable、start,并确保 target(如 multi-user.target)已就绪,否则可能错过触发时机。
- 除非你在做自动化运维平台、需要统一管理大量定时任务并审计日志,否则没必要为关机单独写 .timer 文件
- systemd timer 的日志在
journalctl -u your-shutdown.timer,排查比sudo crontab -l和tail /var/log/syslog | grep shutdown更绕 - 一个典型坑:timer 单元默认以当前用户身份运行,若没显式指定
User=root和WantedBy=timers.target,关机命令会因权限不足静默失败
真正要注意的复杂点是:关机动作本身不可逆,cron 一旦触发 shutdown -h now 就没有回退路径。所以务必先用 +2 延迟测试,确认日志、通知、进程检查都走通,再切到 now。另外,虚拟机环境下(如 VirtualBox/VMware),宿主机休眠可能导致 guest cron 守护进程暂停,定时任务会跳过——这时得靠宿主机调度或改用 at + 系统唤醒机制补位。

















