macOS 服务监控预警方案采用 launchd 生命周期管理 + log 命令实时日志追踪 + 轻量健康检查脚本主动探测“假死”,全程原生、低开销、零第三方依赖。
macos 系统服务运行状态监控预警,核心是用 launchd 做生命周期管理 + log 命令 实时盯日志 + 轻量健康检查脚本 主动探测“假死”。不依赖第三方工具,原生稳定、低开销。
用 launchd 配置自动重启与基础监控
launchd 是 macOS 唯一官方服务管理器,所有自定义服务都需通过 plist 文件注册。关键配置项要写准:
- KeepAlive true:进程退出就立即重启(适合守护型服务)
- KeepAlive { "Crashed" = true; }:只在崩溃时重启(避免因正常退出反复拉起)
- ThrottleInterval 60:60 秒内最多重启一次,防雪崩
- StartInterval 30:无守护模式的脚本可用,每 30 秒尝试启动(配合 RunAtLoad false)
- 务必在 plist 中设置 StandardErrorPath 和 StandardOutPath,把 stderr 输出到文件,方便查崩溃原因
实时查看服务状态和日志
不用翻文件,系统日志统一走 Unified Logging,命令直达关键信息:
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
- 查服务是否在跑:
launchctl list | grep your.service(看 PID 和 last exit status) - 盯实时日志:
log stream --predicate 'subsystem == "your.service.identifier"' --info --debug - 查最近 24 小时报错:
log show --predicate 'eventMessage contains "error" && subsystem == "your.service.identifier"' --last 24h - 若服务输出到自定义 log 文件,确保 plist 中已配
<key>StandardOutPath</key><string>/var/log/your-service.log</string>
加一层主动健康检查防“假死”
launchd 只管进程存不存在,不管它有没有响应。必须额外加脚本探测真实可用性:
- 写一个 shell 脚本,用
curl -f http://localhost:8080/health或lsof -i :8080 | grep LISTEN判断服务是否可连通 - 失败时执行:
launchctl kickstart -k gui/$(id -u)/your.service(强制重启) - 把这个脚本再注册为另一个 launchd 定时任务,用 StartCalendarInterval 设为每 2 分钟跑一次
- 避免直接
kill -9,优先发SIGTERM等待优雅退出,再交由 launchd 决定是否重启
异常时联动通知或动作
光重启不够,得让开发者第一时间感知问题:
- 在健康检查脚本里加入
osascript -e 'display notification "your.service 响应超时" with title "服务告警"'弹桌面提醒 - 结合终端(如 iTerm2)或 VSCode,用 Zsh 插件或 Task 监听日志关键词,触发自动重启 dev server 或清缓存
- 若服务有 Web 管理页,可在健康检查失败后 curl 推送一条 Slack 或邮件(用
mail -s或调用 Cloudflare Worker)

















