Seanma
V2EX  ›  macOS

告别繁琐的 plist 文件,我是如何优雅管理 macOS 后台服务的

  •  
  •   Seanma · 3 days ago · 2313 views

    对于喜欢折腾 macOS 的效率玩家或开发者来说,系统底层的 launchd 绝对是一个让人又爱又恨的存在。

    作为 macOS 的标准后台守护进程管理器,无论是开机自启的脚本、定时执行的自动化任务,还是常驻后台的服务,都离不开它。但遗憾的是,苹果官方只提供了一个极其硬核的命令行工具 launchctl 。

    前段时间,我折腾着把一台 M4 Mac Mini 改造为本地的 Home Lab ,上面跑了各种各样的常驻服务、反向代理以及内网穿透工具。为了让这些服务在后台稳定运行且开机自启,我不得不反复穿梭在终端里,手写或修改冗长且容易出错的 .plist (XML) 配置文件,并不断重复敲击 launchctl load 和 unload 命令。

    对于一个追求自动化和效率的人来说,这种体验实在太不优雅了。

    寻找完美工具的破灭 在决定自己动手之前,我也在市面上寻找过替代方案。

    老牌工具 LaunchControl 功能确实非常强大,但它的界面过于硬核和复杂,学习曲线陡峭,且售价并不便宜;另一款 Lingon Pro 虽然界面现代了一些,但作为一款轻量级需求工具,它依然是一款付费的闭源商业软件。

    我只是需要一个轻量、直观、且能让我随时掌控 Mac 后台服务的控制台。既然找不到完全称心如意的,那就自己写一个吧。于是,LaunchManager 诞生了。

    LaunchManager:给 launchd 穿上现代化的外衣 LaunchManager 是一款专为 macOS 设计的开源后台服务管理工具。它的核心理念很简单:把反人类的命令行和 XML 配置文件,变成一目了然的可视化开关。

    它主要解决了以下几个痛点:

    告别终端,可视化管理: 所有的 User Agents 、Global Daemons 等后台进程都被分门别类地列出。你可以通过直观的 UI 界面,一键启用、禁用或重启某个服务,再也不用去记忆复杂的 launchctl 命令。

    状态一目了然: 某个后台服务到底在没在跑?有没有报错? LaunchManager 提供了清晰的状态指示灯,服务的运行状态和 PID 尽收眼底。

    极致轻量,清爽无广告: 没有复杂的商业化设计,只有纯粹的工具属性。采用现代化的界面设计,完美融入 macOS 的原生视觉体验。

    AI 辅助开发,全开源回馈社区 作为一个习惯用自动化工具提升效率的开发者,LaunchManager 也是我结合 Claude 进行 AI 结对编程的产物。这不仅极大地缩短了从构想到落地的时间,也让我有更多精力去打磨 UI 细节和交互体验。

    更重要的是,我深知开源社区对于开发者的意义。因此,LaunchManager 采用了 MIT 协议完全开源。你不需要支付任何费用,任何人都可以审查它的代码,或者基于它进行二次开发。

    项目主页与下载: https://launchmanager.seanhub.top/

    如果你也曾被 macOS 的启动项和后台服务折磨过,或者正在为你的 Mac 寻找一个优雅的后台管理面板,不妨试试 LaunchManager 。

    希望这个小工具能帮你省下宝贵的时间。如果它对你有帮助,欢迎在 GitHub 上为我点亮一颗 Star ,这是对独立开发者最大的鼓励!

    19 replies    2026-06-04 22:26:37 +08:00
    lianginx
        1
    lianginx  
       3 days ago
    不错,挺好👍
    slowman
        2
    slowman  
       3 days ago
    谁能用 AI vibe 一个 LaunchControl 一模一样的
    goldenlove
        3
    goldenlove  
       3 days ago
    虽然 AI 时代已经让 AI 来管理了。
    但这界面确实舒服,Star 了。👍
    LoNeZ
        4
    LoNeZ  
       3 days ago
    ... 现在不都 agent 吗? 最好支持 agent 的一些接口出来, 让 agent 直接开始干 😅
    q534
        5
    q534  
       3 days ago
    好东西!已 star
    不过我最近都直接用 claude 管理启动项了,实在搞不懂 mac 的启动项,有好几个路径。
    带 UI 当然还是更好用些
    q534
        6
    q534  
       3 days ago
    bug ,readme 里面的 brew 不能安装
    EchoWhale
        7
    EchoWhale  
       3 days ago
    @q534 比起路径, 更让人搞不懂的他的命令。
    load/unload/bootstrap/bootout/enable/disable
    fds
        8
    fds  
       3 days ago
    👍 我之前也想做,就是这套有些复杂,理解不清楚。现在是用 zellij 在后台跑 5 个脚本,看输出很方便。只是每次重启电脑后,需要手动执行一条命令复活这组 session 。
    shiltian
        9
    shiltian  
       3 days ago
    我 vibe 了个相似的 😂
    kairosbladejiuji
        10
    kairosbladejiuji  
       2 days ago
    👍大佬很有想法,界面很好看
    Seanma
        11
    Seanma  
    OP
       1 day ago
    感谢!
    Seanma
        12
    Seanma  
    OP
       1 day ago
    @q534 奇怪 我测试了一下没问题呀
    Seanma
        13
    Seanma  
    OP
       1 day ago
    @EchoWhale 感谢指出,发现 ai 把一些即将弃用的 load unload launchd 命令也放进来了,后面应该只会有 bootstrap/bootout/enable/disable
    EchoWhale
        14
    EchoWhale  
       1 day ago via iPhone
    @Seanma 哈哈其实 Launchctl -h 推荐的是用 load/unload 。

    另外抓一个虫,查看日志就会占满 cpu 然后 app 卡死
    Seanma
        15
    Seanma  
    OP
       1 day ago
    @EchoWhale 最新版本修复了 感谢
    A2umiA
        16
    A2umiA  
       1 day ago
    我好像从来没有管过 launchd, 有什么场景需要自己手动配这个啊, 我看 nix-darwin 也能管理 launchd
    netdcy
        17
    netdcy  
       1 day ago
    除了 Agents 、Daemons ,还支持 LoginItems 吗?就是“通用-登录项与扩展-登录时打开”的那些。用 KnockKnock 能扫描出来,而且我发现有的程序登记的不是主程序,“通用-登录项与扩展-登录时打开”里就没有,不知道和“允许在后台”是什么关系
    Seanma
        18
    Seanma  
    OP
       16h 12m ago
    @LoNeZ 接口就是 launchctl 呀 ai 直接调用这个就行
    Seanma
        19
    Seanma  
    OP
       15h 35m ago
    @netdcy 感谢反馈,这个问题很有代表性,简单说下 LaunchManager 目前的做法和「登录项」那套机制的关系。

    LaunchManager 管什么

    本应用主要管理 launchd 的 plist ,也就是侧边栏里的:

    • 用户 / 系统 LaunchAgents
    • 系统 LaunchDaemons

    对应目录大致是 ~/Library/LaunchAgents 、/Library/LaunchAgents 、/Library/LaunchDaemons ,可以查看、载入/移除、启停、编辑 plist
    等。

    和「系统设置 → 通用 → 登录项与扩展」的关系

    你在系统设置里看到的两块,和 launchd 有重叠,但不完全是一回事:

    ┌────────────┬────────────────────────────────────────────────────────────────────────────────────┐
    │ 系统设置里 │ 大致含义 │
    ├────────────┼────────────────────────────────────────────────────────────────────────────────────┤
    │ 登录时打开 │ 用户勾选的「开机/登录时启动」应用,偏用户可见的登录项 │
    │ 允许在后台 │ 允许在后台运行的项目(含 Helper 、daemon 等),很多并不会出现在「登录时打开」列表里 │
    └────────────┴────────────────────────────────────────────────────────────────────────────────────┘

    macOS 从 Ventura 起把这类持久化项收进 Background Task Management ( BTM )。所以会出现你看到的情况:

    • KnockKnock / sfltool dumpbtm 能扫到很多项;
    • 有的登记的是 Helper / 子进程,不是主程序图标,在「登录时打开」里看不到;
    • 同一条目可能同时对应一个 launchd plist ( LaunchAgents/Daemons 里能看到)和 BTM 里的一条记录。

    LaunchManager 对 Login Items 的定位(当前版本)

    我们没有做成和 KnockKnock 一样在应用内列出、开关所有 Login Items——Apple 对第三方没有公开的 per-item 开关
    API ,和「允许在后台」也不能在应用里直接改。

    目前在侧边栏增加了 Login Items 入口,用来:

    1. 说明 Launchd (本应用可管) 和 Login Items (需在系统设置里管) 的区别;
    2. 一键跳转到 系统设置 → 通用 → 登录项与扩展,方便你对照处理。

    若某个软件已经在 LaunchAgents / LaunchDaemons 里有 plist ,一般在本应用对应分类里管理即可;若只在「允许在后台」里、或
    KnockKnock 能扫到但系统设置「登录时打开」里没有,通常要在系统设置里允许/关闭,或卸载对应软件——LaunchManager
    会引导你去系统设置,而不是在应用内复刻一份 BTM 列表。

    如果后续社区更希望「应用内只读列出 BTM 项 + 跳转设置」,欢迎继续跟帖,我们会根据反馈评估。再次感谢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5337 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 06:02 · PVG 14:02 · LAX 23:02 · JFK 02:02
    ♥ Do have faith in what you're doing.