Mac可以实现每晚23:00自动退出登录并定时关机:先关闭系统自带的调度功能,再通过launchd加载自定义脚本,调用AppleScript先强制退出登录后执行关机,整个过程无需手动操作,同时不会影响iCloud同步。

你是不是想让Mac每晚11点自动关机,同时还希望所有用户会话能提前退出、未保存文档不阻碍关机流程、iCloud同步也能正常完成?macOS系统本身支持定时关机,但【默认并不会自动退出登录,通常需要手动处理或借助脚本才能完成】。否则,一旦遇到未保存的文档、后台弹窗提示或远程连接会话,定时关机就可能被系统静默跳过。
用系统设置调度 + AppleScript组合实现“先退出登录再关机”
这种方法可以绕过图形界面的限制,在关机前强制退出当前用户会话,避免因为未保存文档而导致Mac无法按时关机。它不依赖快捷指令中的“运行前询问”,也无需安装任何第三方软件,更适合需要稳定执行Mac定时关机的人群。
打开“系统设置” → 点击左侧“电池”(MacBook)或“节能器”(iMac/Mac mini) → 向下滚动到底部,点击右下角“调度”按钮。
取消勾选“设定以下日期的睡眠、重新启动或关机”——这一步非常关键,因为macOS自带的关机调度无法自动触发退出登录,所以必须先将它禁用,再改由脚本接管整个自动关机流程。
打开“访达” → 前往文件夹:/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创建后台任务,每天23:00准时执行退出+关机
launchd是macOS底层的任务调度机制,相比快捷指令更加稳定可靠。即使你没有手动打开任何应用,它也可以在设定时间自动执行脚本,是实现Mac每天23:00自动关机和自动退出登录的常见方案。
在访达中按Command + Shift + G,输入~/Library/LaunchAgents → 新建文件,命名为com.user.logout-shutdown.plist,内容如下:
标签 com.user.logout-shutdown 程序参数 /usr/local/bin/auto-logout-shutdown.sh 开始日历间隔 小时 23 分钟 0 加载时运行
保存后,在终端执行:launchctl load ~/Library/LaunchAgents/com.user.logout-shutdown.plist → 这样可以立即加载任务,无需重新启动Mac。
验证是否已经生效:执行launchctl list | grep logout,如果返回一行包含com.user.logout-shutdown,就说明该自动退出登录并关机任务已经注册成功。
注意:这个plist配置只对当前登录用户生效;如果希望所有用户都能触发,则需要放到/Library/LaunchDaemons中,并使用root权限加载。但这种方式会带来更高的安全风险,普通用户通常不建议这样操作。
用终端一次性命令测试退出+关机流程
方法一:直接运行脚本,检查整个逻辑是否正常
在终端中输入:/usr/local/bin/auto-logout-shutdown.sh → 回车后,Mac会在5秒倒计时后自动退出当前账户并关机。这是测试Mac自动退出登录和定时关机设置是否可用的最快方式,无需等到晚上23:00。
方法二:临时设为1分钟后关机,观察实际执行效果
输入:sudo shutdown -h +1 → 再立即执行:osascript -e 'tell app "System Events" to log out' → 这里的顺序不能颠倒,否则关机命令可能会被退出登录动作中断,导致测试失败。
这一步实际操作并不复杂,只需要按顺序输入两行命令即可。不过建议务必先在非工作关键时段测试一次,确认退出动画与关机动画能够连续出现,没有卡在“正在退出…”界面,这样后续Mac定时自动关机才会更稳定。
