Mac系统警报可通过AppleScript调用log stream轮询统一日志,提取磁盘、Time Machine等错误,组装含时间、服务、摘要及建议的邮件正文,再通过Mail.app自动发送至指定邮箱并标为重要。
mac 上的系统警报(如磁盘空间不足、备份失败、time machine 错误等)默认只弹窗提醒,容易被忽略。用 applescript 自动捕获并转发为邮件,能确保关键问题及时被知悉。
监听系统日志中的关键警报
macOS 将多数系统级警告写入 Unified Logging(统一日志),比如 diskmanagementd、backupd 或 nsurlsessiond 的错误事件。AppleScript 本身不能直接监听日志流,但可配合 log stream 命令实现轻量轮询或触发式检查。
- 用
do shell script "log show --predicate 'eventMessage contains \"disk space\"' --last 5m"检查最近 5 分钟是否出现磁盘相关告警 - 把常用检测逻辑封装成 shell 函数,再由 AppleScript 调用,避免 AppleScript 处理复杂文本匹配
- 建议搭配
launchd定时运行(如每 10 分钟),比常驻进程更省资源
构造带上下文的邮件正文
单纯发“有错误”意义不大。AppleScript 可提取日志中的时间、进程名、错误码和前几行上下文,组装成可读性高的邮件内容。
- 用
text item delimiters或正则(viado shell script "sed -n '/error/p'...")提取关键行 - 在邮件正文中包含:发生时间、涉及服务(如 Time Machine)、错误摘要、建议操作(如“请检查外置硬盘连接”)
- 避免直接粘贴整段原始日志;用
paragraphs 1 thru 3 of theLog控制长度,防止邮件过长被拦截
通过 Mail.app 或 SMTP 发送通知
推荐优先使用系统 Mail.app,无需额外配置密码或应用专用密钥;若需更高可靠性(如网络隔离环境),再考虑 SMTP。
使用 inotes CLI 从终端管理 Apple Notes。当需要在 macOS 的 Notes.app 中列出、读取、创建、编辑、删除或搜索备忘录时使用。
- 调用 Mail.app 示例:
tell application "Mail" to make new outgoing message with properties {subject:"⚠️ 系统警报:" & alertTitle, content:alertBody, visible:true} - 发送前自动添加收件人(支持多个邮箱,用逗号分隔)和标记为重要(
priority:high priority) - 若用 SMTP,建议用
do shell script "mail -s '...' user@example.com 配合 <code>msmtp或sendmail,避免在脚本中硬编码密码
避免重复通知与静默期控制
同一问题反复触发邮件会造成干扰。加入简单状态记录机制即可解决。
- 用 AppleScript 写一个临时标记文件(如
~/Library/Caches/system-alert-latest),存入最近一次告警的时间戳和类型 - 每次运行前先读取该文件,若相同类型错误发生在 60 分钟内,则跳过发送
- 也可借助
defaults write把抑制状态存在 plist 中,更符合 macOS 规范
不复杂但容易忽略:记得在“系统设置 > 隐私与安全性 > 完全磁盘访问”中为 Script Editor 或你打包后的 App 添加权限,否则无法读取日志或调用 Mail。

















