macOS不原生支持网络驱动器断开报警,需通过shell脚本+Automator+launchd实现:每30秒轮询/Volumes/目录,检测挂载状态异常时触发系统通知与Basso音效。

你想让Mac在检测到网络驱动器(如SMB共享、NAS挂载点、Time Machine备份盘)意外断开时,立刻弹出视觉+声音的系统级报警通知,而不是静默失效或仅在Finder中显示“已断开”灰字——这种主动告警能避免你长时间无感知地向失效卷写入数据或执行备份。
确认系统是否原生支持网络断连报警
macOS本身不提供“网络驱动器断开即报警”的内置开关。系统仅在挂载失败时弹窗(如输入错误密码),但对已挂载后突然掉线的行为默认静默处理。因此必须借助脚本监听+系统通知通道组合实现。
打开终端,执行:defaults read com.apple.notificationcenterui criticalAlertsEnabled→ 若返回1,说明critical通道可用;若报错或返回0,需先执行defaults write com.apple.notificationcenterui criticalAlertsEnabled -bool true && killall NotificationCenter启用。
用Automator创建断连检测脚本并绑定通知
此方法无需安装第三方工具,纯系统原生组件实现,触发延迟约3~8秒,适合大多数家庭/办公NAS场景。
① 打开“自动操作”应用 → 新建文档 → 选择“快速操作” → 点击“选取”按钮,在左侧勾选“工作流程收到的输入”设为“没有输入”,“在”设为“任何应用程序”。
② 在右侧操作库中拖入“运行Shell脚本”,将shell类型设为/bin/zsh,粘贴以下代码:
#!/bin/zsh<br>for vol in /Volumes/*; do<br> if [[ -d "$vol" ]] && ! mount | grep -q "$(basename "$vol")"; then<br> osascript -e 'display notification "网络驱动器已断开:" & (do shell script "basename \"'$vol'\"") with title "⚠️ 存储异常"' > /dev/null 2>&1<br> afplay /System/Library/Sounds/Basso.aiff > /dev/null 2>&1<br> break<br> fi<br>done
③ 点击右上角“文件”→“导出”,保存为NetworkDriveAlert.workflow,位置选~/Library/Workflows/Applications/Utilities/(若目录不存在请手动创建)。
④ 打开“系统设置 > 键盘 > 键盘快捷键 > 自动操作”,在右侧勾选刚保存的NetworkDriveAlert.workflow,为其分配快捷键(如Control+Option+Command+D)——【该快捷键仅用于手动触发测试,后续将改为定时运行】。
配置后台定时检测(每30秒轮询一次)
方法一:使用launchd实现免登录常驻
① 在终端中执行:mkdir -p ~/Library/LaunchAgents
② 创建配置文件:nano ~/Library/LaunchAgents/com.user.networkalert.plist,粘贴以下内容(注意替换YOUR_USERNAME为你的实际用户名):
<?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.networkalert</string><br> <key>ProgramArguments</key><br> <array><br> <string>/usr/bin/osascript</string><br> <string>-e</string><br> <string>run workflow "~/Library/Workflows/Applications/Utilities/NetworkDriveAlert.workflow"</string><br> </array><br> <key>StartInterval</key><br> <integer>30</integer><br> <key>RunAtLoad</key><br> <true/><br></dict><br></plist>
③ 保存后执行:chmod 644 ~/Library/LaunchAgents/com.user.networkalert.plist && launchctl load ~/Library/LaunchAgents/com.user.networkalert.plist→ 此时脚本已启动,每30秒自动扫描/Volumes/下所有卷状态。
方法二:用终端命令临时测试(无需重启)
直接在终端中运行:while true; do ~/Library/Workflows/Applications/Utilities/NetworkDriveAlert.workflow; sleep 30; done &→ 该命令会以后台进程持续运行,关闭终端窗口即终止。
验证报警是否生效
拔掉网线或关闭NAS电源,等待30秒内观察屏幕右上角是否弹出带⚠️图标的横幅通知,并伴随Basso提示音。若无反应,检查:系统设置 > 通知 > 自动操作是否开启,且未被专注模式屏蔽;同时确认/Volumes/下确实存在已挂载但物理断开的卷(如/Volumes/MyNAS目录存在但无法进入)。


















