AppleScript无法真正修复应用崩溃,只能在检测到应用退出后自动重启;需通过进程检查、防无限重启机制及launchd集成实现稳定监控,但根本解决仍依赖崩溃原因诊断。
applescript 本身不能直接“修复”应用崩溃,但它可以作为自动化工具,在检测到应用异常退出后,主动重新启动该应用——这属于“崩溃后自动恢复”,而非真正解决崩溃根源。实际中需配合系统机制与合理判断逻辑,避免无限重启循环。
识别应用是否已崩溃退出
macOS 中一个应用若闪退,其进程会消失;AppleScript 可通过 application 对象的运行状态或 system events 查询进程是否存在:
- 使用
is running判断前台应用(仅适用于有 GUI 的前台 App) - 更可靠的是用
do shell script调用pgrep -f "AppName"检查后台进程 - 注意:部分崩溃应用可能残留僵尸进程,建议加
ps+grep组合校验
编写基础自动重启脚本
以下 AppleScript 示例会在检测到「日志查看器」退出后 3 秒内重启它(可替换为任意 App 名称):
repeat
try
-- 检查是否运行(前台方式,适合已知 Bundle ID 的 App)
if not (application "Console" is running) then
delay 3
if not (application "Console" is running) then
tell application "Console" to activate
end if
end if
on error
-- 若检查失败(如权限不足),降级用 shell 检查
set procCount to do shell script "pgrep -f 'Console.app' | wc -l"
if procCount = "0" then
do shell script "open -a 'Console'"
end if
end try
delay 10
end repeat- 脚本用
repeat循环持续监控,间隔 10 秒避免过度轮询 -
delay 3防止误判短暂切换或最小化状态 -
open -a比tell application更稳定,尤其对非前台启动场景
规避无限重启陷阱
若应用每次启动几秒就崩溃,自动重启会形成恶性循环,加重系统负担甚至触发内核保护。必须加入防护机制:
- 记录最近三次启动时间戳,若间隔均短于 8 秒,自动暂停脚本并弹窗提醒
- 检查崩溃日志:用
do shell script "tail -n 20 /var/log/system.log | grep -i 'Console.*crash'"判定是否真崩溃 - 限制每日重启次数(例如最多 5 次),超出后写入日志并退出脚本
与系统服务集成实现常驻运行
单独运行 AppleScript 不可靠,应转为 launchd 守护进程:
- 将脚本保存为
~/Library/Scripts/restart-console.scpt - 创建
~/Library/LaunchAgents/local.restart.console.plist,设置KeepAlive和RunAtLoad - 加载服务:
launchctl load ~/Library/LaunchAgents/local.restart.console.plist - 优势:开机自启、崩溃后由系统自动拉起脚本进程、不依赖 Finder 或登录界面
不复杂但容易忽略:自动重启只是表层补救,真正稳定仍需定位崩溃原因——比如签名失效、Rosetta 设置错误、缓存损坏或内存泄漏。AppleScript 可帮你争取排查时间,但不能替代诊断。


















