Mac可实现每晚23:00自动退出登录并关机:先禁用系统自带调度,再通过launchd加载自定义脚本,调用AppleScript强制登出后关机,全程无需手动干预且不中断iCloud同步。
你想让Mac在每天晚上11点自动关机,同时确保所有用户会话提前退出、未保存文档不阻断流程、iCloud同步不中断——系统原生支持定时关机,但【默认不会自动退出登录,必须手动干预或用脚本绕过】,否则遇到未保存文稿、后台弹窗或远程连接时,关机将被静默跳过。
这个方法能绕过图形界面限制,在关机前强制退出当前用户会话,避免因未保存文档导致关机失败。它不依赖快捷指令的“运行前询问”,也不需要第三方工具。
打开“系统设置” → 点击左侧“电池”(MacBook)或“节能器”(iMac/Mac mini) → 滚动到底部,点击右下角“调度”按钮。
取消勾选“设定以下日期的睡眠、重新启动或关机”——这一步很关键,因为系统自带的关机调度无法触发退出登录,必须禁用它,改用脚本接管。
打开“访达” → 前往文件夹:/usr/local/bin(若不存在,请先在终端执行sudo mkdir -p /usr/local/bin并输密码) → 新建文本文件,命名为auto-logout-shutdown.sh,粘贴以下内容:
#!/bin/bash
osascript -e 'tell app "System Events" to log out'
sleep 5
osascript -e 'tell app "System Events" to shut down'
回到终端,执行:sudo chmod +x /usr/local/bin/auto-logout-shutdown.sh → 这步赋予脚本可执行权限,【缺少此步脚本将完全不运行】。
launchd是macOS底层守护进程,比快捷指令更可靠,即使你没登录、没打开任何应用,它也能按时唤醒并执行脚本。
在访达中按Command + Shift + G,输入~/Library/LaunchAgents → 新建文件,命名为com.user.logout-shutdown.plist,内容如下:
Label
com.user.logout-shutdown
ProgramArguments
/usr/local/bin/auto-logout-shutdown.sh
StartCalendarInterval
Hour
23
Minute
0
RunAtLoad
保存后,在终端执行:launchctl load ~/Library/LaunchAgents/com.user.logout-shutdown.plist → 立即加载任务,无需重启。
验证是否生效:执行launchctl list | grep logout,若返回一行含com.user.logout-shutdown,说明已注册成功。
注意:该plist仅对当前用户生效;如需所有用户触发,须放入/Library/LaunchDaemons并改用root权限加载,但会增加安全风险,不推荐普通用户操作。
方法一:直接运行脚本验证逻辑是否通顺
在终端中输入:/usr/local/bin/auto-logout-shutdown.sh → 回车后,Mac会在5秒倒计时后退出当前账户并关机。这是最快速的实操验证方式,无需等待到23:00。
方法二:临时设为1分钟后执行,观察行为
输入:sudo shutdown -h +1 → 再立刻执行:osascript -e 'tell app "System Events" to log out' → 注意顺序不能反,否则关机命令可能被登出中断。
这一步操作起来很简单,直接把两行命令依次敲进去就行,但务必先在非关键时段试一次,确认退出动画和关机动画连贯出现,没有卡在“正在退出…”界面。