macOS 上的 LaunchAgents 和 LaunchDaemons:完整且安全的指南

LaunchAgents 依赖于用户和系统 LaunchDaemons;两者都由特定路径中的 launchd 和 .plist 文件管理。

macOS 13+ 引入了 SMAppService、通知和 XML 配置文件,用于在后台透明地批准项目。

使用 sfltool、launchctl 和 日志 来自后台任务管理;检查系统设置中的项目。

应用正确的权限,将 KeepAlive 与 successfulExit/NetworkState 结合使用,并避免触碰 /System/Library 以实现最大稳定性。

在 macOS 中,许多神奇的事情都是在幕后发生的,这要归功于那些在你不知不觉中启动的服务,以及配对 启动代理/启动守护进程 是自动化的核心。如果你想知道如何制作一个 脚本 引导 单独运行、保持关键应用程序处于活动状态或审核应用程序的加载情况,这就是您一直在寻找的实用指南。

从 MacOS的13,苹果通过新的软件包结构改变了游戏规则 应用 以及框架 短信应用服务,为用户提供更高的透明度,并对登录元素进行一致的管理, 发射代理 y 启动守护进程。此外,还为管理员提供了配置文件和诊断工具的增强功能,值得掌握。

相关文章:启动时运行的程序。要删除哪些以及如何删除

什么是 launchd、LaunchAgents 和 LaunchDaemons

的过程 发射 它在内核启动后立即启动(它是最先启动的进程之一,通常 PID 为 1),负责启动、控制和监视其他服务。它通常消耗很少的资源,但如果有一天你在活动监视器中发现它运行速度很快,重启通常就能恢复正常。

MGI LaunchDaemons 它们在系统启动时执行,并在以下上下文中执行 根;它们不依赖于任何登录,也无法与图形界面交互。它们非常适合系统任务、持久进程以及即使在用户未登录时也需要可用的服务。

MGI LaunchAgents 它们会在特定用户登录时加载,并可与界面(菜单栏、通知、窗口等)交互。它们非常适合 用户实用程序、需要登录的应用程序向导和流程。

在这两种情况下,配置都驻留在文件中 的.plist 其中包含指示运行什么、何时运行以及如何运行的键和值。这些 .plist 文件由 launchd 管理,位于系统上的特定位置,因此了解它们的运行位置、权限以及如何加载它们至关重要。

.plist 文件的结构和位置

macOS 按如下方式组织 .plist 文件:在系统级别 /系统/库/启动代理 y /系统/库/LaunchDaemons在全球范围内 /库/ LaunchAgents y /库/ LaunchDaemons,并在用户层面 〜/库/ LaunchAgents。健康的规则是在 /Library 或 ~/Library 中安装你自己的,并且 不要碰 /System/Library 树。

.plist 文件是 XML 文件,其键如下 标签 (服务标识符), 会议议程 o 程序参数 (运行什么), 负载运行 (加载后立即启动)或 活着 (重试/实时策略)。您可以使用文本编辑器查看它们,但请谨慎编辑它们,并始终了解每个键的作用。

要使 launchd 接受 .plist 文件,必须尊重所有权和权限。作为管理员: sudo chown root:wheel /Library/LaunchAgents/mi.servicio.plist y sudo chmod 644 /Library/LaunchAgents/mi.servicio.plist. 这些设置确保 根 可以写,组 轮 其他人可以读取它,并且 launchd 信任该文件。

安装后,它会加载 sudo launchctl load -w /Library/LaunchAgents/mi.servicio.plist 或其对应物 /Library/LaunchDaemons要删除它,您可以使用 launchctl remove com.ejemplo.mi-servicio (其中标签对应于 标签).

修复 Chrome 中无法访问此网站错误的简单方法macOS 13 以来的新功能:SMAppService 和用户透明度

苹果引入了一种应用程序包结构,将辅助可执行文件保留在应用程序本身中,并使用 短信应用服务这允许记录和监控 登录元素、启动代理和启动守护进程 作为辅助可执行文件,无需将它们传播到整个系统,并且为用户提供更高的可见性。

当这些项目通过 MDM 或安装程序部署时,macOS 13+ 会显示 托管项目安装通知 在“系统设置”中举报并允许审核。首次符合规则的匹配会生成通知;同一天的后续匹配将不再重复发出通知。

如果用户 推迟 通知后,macOS 会在所选时间段(1 天或 1 周)内静音此类通知。通知可见期间,不会显示后续安装;如果您关闭通知,后续安装将恢复通知。此策略可在提供控制的同时减少噪音。

可视性和诊断:您需要检查的一切

要查看新帧记录的内容,请打开 系统设置>常规>启动项您将在那里看到登录和背景元素;信息按钮显示正在启动的可执行文件和相关详细信息。

在线的 comandos,您有多种用途。使用 launchctl list 您将获得所有正在运行的服务。对于后台任务框架,请使用 sfltool dumpbtm 并检查当前状态(包括 UUID 的有效载荷 servicemanagement)。如果需要清理测试之间的状态,请运行 sfltool resetbtm 为了卫生起见, 重新开始 el Mac 然后再试一次。

对于实时日志,过滤 控制台 按适当的子系统和类别启动,或 终端: log stream --debug --info --predicate "subsystem == 'com.apple.backgroundtaskmanagement' AND category == 'mcx'"通过它,您将看到项目添加、删除和管理的有用痕迹。

如果您有权访问 AppleSeed for IT,该工具 Mac 评估实用程序 4.3.0+ 生成详细的报告,内容与它所抛出的内容一致 sfltool dumpbtm,并允许导出分隔结果以供进一步分析或与库存关联。

用于管理后台任务的 XML 配置文件

组织可以使用 XML配置文件内容是一系列规则(字典)的数组;当元素匹配时,即表示通过。有几种匹配类型值得掌握。

BundleIdentifier (捆绑包 ID)与特定应用程序完全匹配。

BundleIdentifierPrefix 授权前缀下的应用程序系列。

团队标识符 来自开发人员(代码签名)的完全匹配。

标签 服务(关键 Label 来自 launchd .plist) 并完全匹配。

标签前缀 批准以给定模式开头的标签。

通过这种方法,管理员可以确保合法元素能够顺利激活,并且 可追溯性 并遵守公司政策。如果您管理车队,这可以节省您的支持费用并避免不必要的停机。

安全、恶意软件和系统权限

许多安装程序会添加 .plist 文件,这些文件在卸载原始应用时会被遗忘。这些残留文件可能会重新启动您认为已经消除的进程。此外, 恶意软件 滥用 LaunchAgents 来持久化、收集数据并与远程服务器通信。

如何在 Windows 11 中轻松实现所有声音静音苹果维护着一个带有常见辅助二进制文件的归因文件,可帮助识别谁是谁: /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plist咨询它可以给你提供线索 属性 可执行文件到其父应用程序进行取证分析或清理。

作为“手工制作”的监视层,您可以激活 文件夹操作 在敏感路线上: /Library/LaunchAgents, /Library/LaunchDaemons, /System/Library/LaunchAgents, /System/Library/LaunchDaemons y ~/Library/LaunchAgents这样,当出现新的 .plist 文件时,您将收到通知,以便您随时检查它。

创建您自己的 LaunchAgents 和 LaunchDaemons

基本思路很简单:编写一个 .plist 文件,其中包含 标签 (例如。, com.ejemplo.miscript), 定义 会议议程 o 程序参数 使用可执行文件/脚本的精确路径,设置如下键 负载运行 并且,如果适用的话, 活着,并将其放置在相应的文件夹中。

如果任务应在登录前运行且无需 UI,则将其放置在 /Library/LaunchDaemons。如果您依赖用户和/或与界面交互,请使用 /Library/LaunchAgents o ~/Library/LaunchAgents (仅限该用户)。记得申请 财产和许可证 加载前请纠正。

立即激活: sudo launchctl load -w /Library/LaunchDaemons/com.ejemplo.miscript.plist. 要停止并下载: sudo launchctl unload -w /Library/LaunchDaemons/com.ejemplo.miscript.plist o launchctl remove com.ejemplo.miscript。确保 二进制文件的路径存在且可执行.

实用建议:始终先进行测试 〜/库/ LaunchAgents 与您的用户沟通,检查日志和行为,然后才将其提升到/Library。避免修改 /System/Library/…;除了不好的做法之外,受保护的系统(SIP) 出于安全原因阻止了它。

KeepAlive 策略和实际用例

如果你需要一个流程来始终保持领先,关键 活着 允许你进行粒度设置。你可以 进行无条件重试或使用有条件的字典进行精细控制。

一个非常有用的模式结合 活着 同 成功退出. 当你定义 SuccessfulExit = false如果进程退出时返回非 0 的代码(崩溃、错误),launchd 将重试,但如果用户“干净地”关闭它(exit 0), 没有 将重新启动它。这样,您就可以避免更新应用程序或关闭 Mac 时遇到的任何麻烦。

另一种常见的方法是 网络状态:如果你将其设置为 true 在 KeepAlive 中,重新启动将遵循“网络可用性”(设备具有 IP 地址)的原则。注意:网络存在并不一定意味着可以访问互联网;launchd 仅检查基本连接,而不会检查您的 ISP 是否响应。

如果您计划保留界面应用程序(例如,菜单栏实用程序),请创建一个 启动代理 及其实际的包二进制文件:例如, /Applications/MiApp.app/Contents/MacOS/MiApp。避免使用别名或“标志性”应用程序的路径,并指向包内的可执行文件。

在无人值守的环境中(信息亭、信息屏幕、具有持久会话的服务器),这些策略可以为您的工具带来不同 不要摔倒 如果它们能站立起来,它们就会自行站立,无需人工干预。

应避免的旧替代方案和做法

苹果被抛在一边 克龙 y 登录钩子 作为启动任务的推荐方式;官方路径是 launchd。此外还有 启动项 在旧版本中(系统和全局库中的文件夹),但今天不应该用于新的实现。

手动编辑系统树(/System/Library/LaunchDaemons) 可能会在 Mac 上 它没有开始。不要冒险:如果您需要很早启动,请使用具有正确配置和权限的 /Library/LaunchDaemons,并且不要动系统组件。

性能监控和故障排除

如果您发现 Mac 运行缓慢,请打开 活动监控 并按 CPU 排序。通常 launchd 未出现在领先位置;如果持续处于 30-40% 的水平,请重启系统并再次检查。如果问题仍然存在,请使用 launchctl list 并排除嫌疑人。

如何将STL文件转换为G代码并了解它们之间的区别要审核哪些项目已通过新框架记录, sfltool dumpbtm 是黄金: 捕捉你的出口 并将其保存到您的支持报告中。在测试之间, sfltool resetbtm 它会让你恢复原状;记得重新启动以避免中间状态。

日志是你的朋友: log stream --debug --info --predicate "subsystem == 'com.apple.backgroundtaskmanagement' AND category == 'mcx'" 您将获得高点、低点和变化的精细细节。搭配 控制台 如果您喜欢图形界面,则可以通过相同的字段进行过滤。

利用 MDM 和最佳实践进行大规模管理

在托管部署中,创建 XML 配置文件 描述批准规则(按 bundle ID、前缀、团队 ID、标签或标签前缀)。这样,当应用程序注册其助手时,macOS 将自动批准它,并且用户将看到受控的通知。

测试您的标准流程(安装、升级、卸载)并验证结果 声明式设备管理 在 macOS 14+ 上(状态报告)并使用上述工具。收集用户和供应商的反馈,以使应用程序适应新框架。

记录内部策略:授权内容、授权标准、审核人员、审核方式以及如果某个元素开始消耗资源该怎么办。通过这种规范,您可以避免意外,并提高 安全 以及舰队的稳定性。

清洁和持续监测技巧

如果卸载某些东西后,该项目在启动时重新出现,请按名称搜索其 .plist /Library/LaunchAgents, /Library/LaunchDaemons y ~/Library/LaunchAgents。删除文件并下载服务 launchctl remove 用他的 标签.

为了提高您的知名度,请启用这些 文件夹操作 评论:每当敏感路径中出现新的 .plist 文件时,您都会收到通知并可以立即进行干预。这是一个简单的措施,可以省去您的麻烦。

请记住,代理是针对每个用户的,而守护进程是系统范围的。在共享计算机上,您可能希望在 ~/Library/LaunchAgents 为 不影响其他配置文件,除非是跨企业的任务。

如果你让某个应用程序始终保持打开状态,请记住,它可能会阻止 关机或重启 系统尝试关闭时重新启动。在更新或重新启动之前,请使用以下命令禁用该服务 launchctl remove 或者下载.plist,然后重新激活它。

最后,不要忘记定期检查 系统设置>常规>启动项 以及背景项目部分。这是检测那些通过粗心安装人员偷偷带入的“偷渡者”的最快方法。

主宰 LaunchAgents 和 LaunchDaemons 它赋予您掌控权:您可以了解启动的内容、时间以及原因;您可以使用配置文件批准合法操作,使用 sfltool 和日志进行诊断,并借助 macOS 13+ 中 SMAppService 提供的透明度增强安全性。通过一些清晰的规则(正确的路径、权限、一致的标签以及 KeepAlive 的正确使用),您将拥有稳定的服务、知情的用户和更可预测的系统,而无需受困于过时的方法。

艾萨克对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。