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

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

  •  
  •   Seanma 2 days ago 1795 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 ,这是对独立开发者最大的鼓励!

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

    另外抓一个虫,查看日志就会占满 cpu 然后 app 卡死
    Seanma
        15
    Seanma  
    OP
       8h 50m ago
    @EchoWhale 最新版本修复了 感谢
    About     Help     Advertise     Blog     API     FAQ     Solana     946 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 20:14 PVG 04:14 LAX 13:14 JFK 16:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86