讲师中心 微信公众号
AI工具推荐 视频效率加速

AppleScript 处理 macOS 应用崩溃自动重启

夏伟小哥_7165

夏伟小哥_7165

发布时间:2026-07-03 14:03:22

|

241人浏览过

|

来源于php中文网

原创

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 更稳定,尤其对非前台启动场景

规避无限重启陷阱

若应用每次启动几秒就崩溃,自动重启会形成恶性循环,加重系统负担甚至触发内核保护。必须加入防护机制:

macOS Notes
macOS Notes

通过 AppleScript 创建、读取、搜索及管理 macOS 备忘录。适用于用户要求记笔记、记录事项、保存想法、创建会议记录等场景。

下载
  • 记录最近三次启动时间戳,若间隔均短于 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 可帮你争取排查时间,但不能替代诊断。

热门AI工具

更多
火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
macOS怎么切换用户账户
macOS怎么切换用户账户

在 macOS 系统中,可通过多种方式切换用户账户。如点击苹果图标选择 “系统偏好设置”,打开 “用户与群组” 进行切换;或启用快速用户切换功能,通过菜单栏或控制中心的账户名称切换;还能使用快捷键 “Control+Command+Q” 锁定屏幕后切换。

4624

2025.05.09

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

20

2026.10.16

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

20

2026.10.16

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

20

2026.10.16

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

20

2026.10.16

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

20

2026.10.16

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

40

2026.10.15

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

20

2026.10.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Miniconda官方安装文档
Miniconda官方安装文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn