Mac可通过终端脚本实现节假日智能跳过关机:先创建holidays.txt列出法定日期,再编写判断脚本,赋予执行权限,用launchd设置定时任务,遇节假日自动静默退出不关机。

想让Mac在春节、国庆等法定节假日跳过自动关机,避免假期在家办公或娱乐时被意外关机中断,必须绕过系统设置中简单的“每天/每周”重复逻辑,改用终端命令配合日期判断脚本实现条件化关机。
用终端+脚本实现节假日智能跳过关机
第一步:创建节假日排除列表文件
打开终端 → 输入 sudo nano /usr/local/etc/holidays.txt → 按回车进入编辑器 → 逐行输入你希望跳过的日期,格式为 YYYY-MM-DD(例如 2026-10-01、2027-01-29),每行一个日期 → 按 Control+O 保存 → 回车确认 → Control+X 退出。
第二步:编写带判断的关机脚本
输入 sudo nano /usr/local/bin/smart_shutdown.sh → 在编辑器中粘贴以下内容:
#!/bin/bash<br>today=$(date +%Y-%m-%d)<br>if grep -q "^$today$" /usr/local/etc/holidays.txt; then<br> exit 0<br>else<br> shutdown -h now<br>fi
第三步:赋予脚本执行权限
输入 sudo chmod +x /usr/local/bin/smart_shutdown.sh → 这一步不可省略,否则系统无法调用该脚本执行关机。
第四步:用 launchd 替代 pmset 设置定时任务
输入 nano ~/Library/LaunchAgents/com.user.smartshutdown.plist → 粘贴以下配置(将 Hour 和 Minute 改为你想关机的具体时间,例如 23 点 0 分):
<?xml version="1.0" encoding="UTF-8"?><br><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><br><plist version="1.0"><br><dict><br> <key>Label</key><br> <string>com.user.smartshutdown</string><br> <key>ProgramArguments</key><br> <array><br> <string>/usr/local/bin/smart_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/><br></dict><br></plist>
第五步:加载并启用该任务
输入 launchctl load ~/Library/LaunchAgents/com.user.smartshutdown.plist → 再输入 launchctl start com.user.smartshutdown → 此时任务已注册进系统服务,将在每天指定时间自动运行脚本,遇到 holidays.txt 中的日期则静默退出,不执行关机。
验证与临时调整
方法一:手动测试是否识别节假日
在终端中运行 /usr/local/bin/smart_shutdown.sh → 若当天在 holidays.txt 中,命令会立即返回且无任何输出;若不在,则立刻触发关机(测试前请先保存所有工作)。
方法二:查看当前生效的定时任务
输入 launchctl list | grep smartshutdown → 出现对应条目说明服务已加载;若无输出,需检查 plist 文件路径和语法是否正确。
方法三:临时添加一个测试日期快速验证
执行 echo "2026-08-19" | sudo tee -a /usr/local/etc/holidays.txt → 再次运行脚本 → 应无反应 → 证明跳过逻辑生效。这一步操作起来很简单,直接把日期追加进去就行。
取消某次关机只需删除对应日期行,或临时重命名 holidays.txt 文件即可。

















