mac每日23点自动关机需兼顾前台文档保存与后台下载保护:系统设置定时关机仅拦截未保存前台应用,不识别transmission等后台下载;推荐用pmset+脚本或快捷指令方案,关机前检测下载进程,存在则跳过,确保下载完成后再执行关机。

你想让Mac在每天晚上11点自动关机,又担心正在用迅雷、Transmission或系统自带的“访达”后台下载任务被强制中断——macOS原生定时关机机制默认会检查前台应用是否有未保存文档,但对纯后台下载进程无感知,也不会等待其完成,直接关机会导致下载中断、文件损坏或重传。
用系统设置定时关机(前台友好,但不保后台下载)
这是最直观的方法,适合日常办公场景,全程图形界面操作,但它只拦截前台有未保存文档的应用,不会识别Transmission、aria2c或迅雷这类后台下载工具是否仍在运行。
第一步:点击屏幕左上角苹果图标 → 选择“系统设置”。
第二步:左侧边栏中,MacBook用户点“电池”,iMac/Mac mini用户点“节能器”。
第三步:滚动到底部,点击右下角的“定时”按钮。
第四步:勾选“设定以下日期的睡眠、重新启动或关机”,右侧下拉菜单选“关机”,输入时间(例如23:00),再选择重复周期(如“每天”)。
第五步:点击“好”保存。到点后,若Word、Notes等前台App有未存内容,会弹出标准保存提示;但Transmission窗口最小化、迅雷托盘图标还在运行,系统完全不拦——下载进程会被立即终止,未完成的.part文件可能无法续传。
用pmset命令+脚本检测下载状态(真正保护后台任务)
此方案在关机前主动检查下载进程是否存在,仅当确认无活跃下载时才执行关机,避免误杀。需配合Shell脚本与launchd守护。
方法一:创建检测并关机脚本
打开“访达 → 前往 → 前往文件夹”,输入:/usr/local/bin → 回车(若目录不存在,请先新建)。在该目录下新建文本文件,命名为 safe-shutdown.sh,用“文本编辑”打开,粘贴以下内容:
#!/bin/bash
# 检查常见下载进程
if pgrep -f "Transmission|aria2c|netcat|curl.*-o|wget" > /dev/null; then
exit 0 # 有下载进程,不关机
else
sudo shutdown -h now
fi
保存后,回到终端,执行:sudo chmod +x /usr/local/bin/safe-shutdown.sh,赋予可执行权限。
方法二:用launchd每日触发检测
在访达中前往:~/Library/LaunchAgents/(若不存在请新建),新建文件 com.user.safe-shutdown.plist,粘贴以下内容(注意替换你的用户名):
\n\n
保存后,在终端执行:launchctl load ~/Library/LaunchAgents/com.user.safe-shutdown.plist,立即注册任务。
此后每天23:00,系统会运行脚本:若检测到Transmission、aria2c、wget等任意下载相关进程正在运行,脚本静默退出,本次关机跳过;只有全部下载结束,才会真正执行关机。
用快捷指令+AppleScript实现带下载状态判断的关机
如果你不想碰终端和plist,这个方案用快捷指令图形化封装检测逻辑,每次触发前自动扫描下载活动,并弹窗告知你当前状态。
第一步:打开“快捷指令”App → 点右上角“+”新建快捷指令 → 命名“安全夜间关机”。
第二步:点“添加操作” → 搜索“运行脚本” → 选择“Shell” → 脚本框中粘贴:
pgrep -f "Transmission|aria2c|curl.*-o|wget" > /dev/null && echo "active" || echo "idle"
第三步:点“添加操作” → 搜索“如果” → 设置条件为“文本包含” → 输入值填“active”。
第四步:在“如果”分支内,添加“显示通知” → 标题填“⚠️ 下载进行中”,消息填“检测到后台下载任务,本次关机已跳过”。
第五步:在“否则”分支内,添加“运行 AppleScript” → 脚本框中粘贴:
tell app "System Events" to shut down
第六步:回到快捷指令主界面 → 切换到“自动化”标签页 → “创建个人自动化” → 选择“特定时间” → 设为每天23:00 → 关闭“运行前询问” → 添加刚才创建的快捷指令 → 完成。
首次运行时,系统会要求授予“完全磁盘访问”权限,必须开启,否则无法读取进程列表。启用后,每天23:00自动运行:若发现下载进程,弹窗提醒并中止;若无,则调用系统原生关机流程,触发所有App的保存提示。











