应禁用系统设置中的“调度”功能以排除工作时间段关机,或用终端创建带时段判断的脚本配合launchd实现每日23:00关机但跳过9:00–18:00。

你想让Mac在工作时间段(比如9:00–18:00)保持开机状态,避免系统调度或误设的定时任务在此期间触发关机,同时又保留下班后自动关机能力——这需要主动排除工作时段、而非单纯设置关机时间。
用系统设置禁用工作时间段的关机调度
该方法适用于已通过“调度”功能设置了全天关机,但希望临时屏蔽工作日白天关机的用户。它不新增规则,而是直接停用可能冲突的现有计划。
点击屏幕左上角苹果菜单 → “系统设置”。
左侧边栏中,MacBook用户点“电池”,iMac/Mac mini用户点“节能器”。
向下滚动到底部,点击右下角的“调度”按钮。
【取消勾选“设定以下日期的睡眠、重新启动或关机”】——这是关键动作,任何已设的周期性关机(包括“每天”“仅工作日”)都将立即失效,工作时间段自然不再受干扰。
点“好”保存。此时系统不会在任何时间自动关机,需后续手动补设下班后关机任务。
用终端命令精准跳过工作时间段
如果你必须保留一个每日关机计划(如23:00),但明确要求9:00–18:00之间绝对不执行,终端是唯一能实现“时段排除”的方式。系统设置无法设置“除某时段外执行”,只能靠脚本逻辑拦截。
方法一:创建带时段判断的关机脚本
打开“终端”,输入:sudo nano /usr/local/bin/safe-shutdown.sh。
在nano编辑器中粘贴以下内容:
#!/bin/bash<br>current_hour=$(date +%H)<br>if [[ $current_hour -ge 9 && $current_hour -lt 18 ]]; then<br> exit 0<br>else<br> shutdown -h now<br>fi
按 Control+O 保存 → 回车确认文件名 → Control+X 退出。
一款AI工具,主要用于生成可直接复制粘贴的 Bash 脚本,用于 Ralph Wiggum/AI 代理循环(Codex、Claude Code、OpenCode、Goose)。适用于“拉尔夫循环”“Ralph Wiggum 循环”或 AI 循环请求,依据 PROMPT.md、AGENTS.md、SPECS、IMPLEMENTATION_PLAN.md 进行计划/构建,包含计划与构建模式、背压、沙箱及完成条件,适合需要提升相关任务效率的用户。
赋予执行权限:sudo chmod +x /usr/local/bin/safe-shutdown.sh。
方法二:用launchd每日固定时间调用该脚本
新建plist文件:sudo nano /Library/LaunchDaemons/com.user.safe-shutdown.plist。
填入以下配置(设为每天23:00运行):
<?xml version="1.0" encoding="UTF-8"?><br><br><plist version="1.0"><br><dict><br> <key>Label</key><br> <string>com.user.safe-shutdown</string><br> <key>ProgramArguments</key><br> <array><br> <string>/usr/local/bin/safe-shutdown.sh</string><br> </array><br> <key>StartCalendarInterval</key><br> <dict><br> <key>Hour</key><br> <integer>23</integer><br> <key>Minute</key><br> <integer>0</integer><br> </dict><br> <key>RunAtLoad</key><br> <false></false><br></dict><br></plist>
加载任务:sudo launchctl load /Library/LaunchDaemons/com.user.safe-shutdown.plist。
这一步完成后,脚本将在每天23:00运行;若当前时间落在9–18点之间,脚本直接退出,不执行关机。
验证工作时间段是否真正被跳过
打开终端,运行:date +%H,确认当前小时数。
手动触发脚本测试:sudo /usr/local/bin/safe-shutdown.sh。
若当前时间为14(即14:00),终端应无任何输出并立即返回提示符——说明脚本已成功拦截,未调用关机指令。
若当前时间为22,则会立即关机(测试时请先保存所有工作)。
检查launchd任务是否注册成功:sudo launchctl list | grep safe-shutdown,有输出即表示已激活。










