Ubuntu闲置自动关机需用系统级机制而非TMOUT;推荐cron配合xprintidle检测空闲并调用shutdown,或虚拟机中启用宿主机空闲策略。

Ubuntu如何设置系统在闲置时自动关机

Ubuntu系统闲置时自动关机,和终端闲置自动关闭是两回事:前者是整机断电,后者只是关掉一个 shell 会话。直接设 TMOUT 对系统关机完全无效,必须用系统级定时/事件机制。

用 cron 设置基于时间的自动关机

这是最通用、兼容性最好的方案,适合桌面和服务器环境。关键点在于:关机命令必须以 root 权限执行,且不能依赖用户会话。

检测用户空闲后触发关机(推荐方案)

真正的“闲置关机”需要判断用户是否真没操作——比如键盘、鼠标无输入,且无活跃图形会话或 SSH 连接。Ubuntu 桌面默认用 gnome-session,可借助 loginctlxprintidle

#!/bin/bash
# 检测当前图形会话是否空闲超过 30 分钟(单位:毫秒)
IDLE_MS=$(xprintidle 2>/dev/null)
if [ -n "$IDLE_MS" ] && [ "$IDLE_MS" -gt 1800000 ]; then
# 检查是否有其他用户登录或 SSH 会话
if ! loginctl list-sessions --no-legend | grep -q "seat"; then
/sbin/shutdown -h now "System idle for 30 minutes"
fi
fi

虚拟机场景下更稳妥的替代方案

如果你在 VirtualBox 或 VMware 中运行 Ubuntu 虚拟机,宿主机通常已提供“空闲关机”策略,比 guest 内部实现更可靠。

实际上,真正的难点并非在于“如何编写命令”,而是在于如何精准定义“闲置”的概念:究竟是指无人触碰键盘鼠标?还是不存在活跃的SSH连接?亦或是所有TTY都没有登录用户?在不同的应用场景中,loginctlwhosystemctl list-units --type=service --state=active 这些命令的组合逻辑会全然不同——千万不要直接抄袭脚本,而是应该先用 loginctl show-session $(loginctl | grep -m1 'seat' | awk '{print $1}') 来清晰地了解你当前会话的实际状态。

本文转载于:https://www.php.cn/faq/3013487.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。