news 2026/8/30 9:45:16

no-mistakes服务化安装:launchd/systemd/schtasks三平台渲染

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
no-mistakes服务化安装:launchd/systemd/schtasks三平台渲染

no-mistakes服务化安装:launchd/systemd/schtasks三平台渲染

【免费下载链接】no-mistakesgit push no-mistakes项目地址: https://gitcode.com/GitHub_Trending/no/no-mistakes

no-mistakes 是一款 git push 驱动的自动化代码校验工具,它的核心是常驻后台的 daemon 守护进程。安装时,no-mistakes 会自动渲染并注册系统级托管服务:macOS 用 launchd LaunchAgent、Linux 用 systemd 用户服务、Windows 用计划任务(schtasks),全程无需手动编写任何服务文件,一条daemon restart即可完成服务化安装。

为什么需要服务化安装

daemon 是 no-mistakes 的长驻进程:git push no-mistakes之后,git hook 只需通知 daemon 就立即退出,真正耗时的 worktree 创建、流水线执行、CI 监控、崩溃恢复全部由 daemon 在后台完成。

如果 daemon 只是普通进程,关终端就没了、崩溃后没人拉起、更新二进制后要手动重跑。托管服务解决这三个问题:

  • 开机/登录自启:登录系统后 daemon 自动就位
  • 崩溃自愈:launchd 的KeepAlive与 systemd 的Restart=always保证进程退出后自动拉起
  • 无感更新no-mistakes update替换二进制后,通过重启托管服务让新可执行文件生效

官方文档对这部分有完整说明:docs/src/content/docs/concepts/daemon.md

三平台各自的渲染产物

安装器根据操作系统分派到三条安装路径,统一入口在 internal/daemon/service.go 的installManagedServiceWithExecutable

macOS:launchd LaunchAgent

渲染产物是一个 plist 文件,写入~/Library/LaunchAgents/com.kunchenguid.no-mistakes.daemon.<后缀>.plist。模板见 internal/daemon/service_launchd.go:

  • ProgramArguments固定为<可执行文件> daemon run --root <NM_HOME>
  • RunAtLoad+KeepAlive实现登录自启和崩溃拉起
  • WorkingDirectory指向 NM_HOME 根目录
  • 标准输出/错误重定向到~/.no-mistakes/logs/daemon-bootstrap.log

启动时走launchctl bootoutbootstrapkickstart -k三步。由于 launchctl 的 bootout 是异步的,bootstrap 可能撞上 errno 37(EPROGRESS),代码内置了 10 秒窗口的自动重试:internal/daemon/service_launchd.go

Linux:systemd 用户服务

渲染产物是~/.config/systemd/user/no-mistakes-daemon-<后缀>.service,unit 模板见 internal/daemon/service_systemd.go:

  • Type=simpleExecStart同样指向daemon run --root <NM_HOME>
  • Restart=always+RestartSec=2提供崩溃自愈
  • [Install]WantedBy=default.target,登录后随用户会话自动启动

安装流程依次执行daemon-reloadsystemctl --user enable,重启前还会reset-failed清掉 crash-loop 残留状态。

Windows:计划任务 schtasks

渲染产物不落盘为文件,而是直接通过schtasks /Create注册,见 internal/daemon/service_schtasks.go:

  • /SC ONLOGON登录时触发,/RL LIMITED以普通权限运行
  • 任务命令为no-mistakes.exe daemon run --root <NM_HOME>
  • 查询状态时通过 PowerShell 的Get-ScheduledTask解析 State 判定运行中/已退出

一个刻意的设计:Windows 路径不转发代理环境变量。因为 ONLOGON 任务运行在用户的交互登录会话里,天然继承会话环境(包括HTTP_PROXY等),无需把可能含凭据的代理地址写进任务定义,也就没有泄露风险。

渲染机制中的三个通用细节

1️⃣ 服务标识按安装隔离

launchd 标签、systemd 单元名、Windows 任务名都带一个由sha256(NM_HOME 根目录)派生的 8 位稳定后缀。这让同一台机器上多个不同NM_HOME的 no-mistakes 安装可以并存,互不覆盖,也不会误杀别的安装的 daemon。实现见 serviceInstanceSuffix。

2️⃣ 代理环境转发与凭据保护

launchd/systemd 拉起的进程只有极简环境。若你在安装时配置了代理,渲染器会把HTTP_PROXYhttps_proxy等变量"烘焙"进服务定义,保证 daemon 及其派生的 agent 能走代理上网。一旦文件里含代理值,落盘权限自动收紧为0600,并采用"临时文件 + 原子改名"写入,凭据从头到尾对其他用户不可见:writeServiceFile。

3️⃣ 兜底与自愈

  • 托管服务安装或启动失败时,自动降级为 detached 守护进程,安装流程仍然成功
  • 新版本会检测并清理旧版本遗留的全局命名服务(先停止再删除),避免"新旧两套 daemon"并存
  • 服务定义中的PATH由已知 bin 目录按"用户目录优先"顺序拼出,保证gocargo、Homebrew 工具都能被找到

常用命令速查

命令作用
no-mistakes daemon start安装(如缺失)并启动托管服务
no-mistakes daemon stop停止 daemon(不删除服务定义)
no-mistakes daemon restart重启,安装脚本 docs/install.sh 末尾即调用此命令
no-mistakes daemon status查看 daemon 与服务状态
no-mistakes update校验 SHA-256 后原子替换二进制并重启服务

CLI 侧封装在 internal/cli/daemon_cmd.go,安装方式一览见 安装文档。

💡小结:你不需要理解任何 plist/unit/schtasks 语法——no-mistakes 按平台渲染、按 NM_HOME 隔离、含凭据自动收紧权限、失败自动降级。装好之后,git push no-mistakes就可以在任何终端、任何登录会话中稳定触发后台流水线了。

【免费下载链接】no-mistakesgit push no-mistakes项目地址: https://gitcode.com/GitHub_Trending/no/no-mistakes

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 9:42:19

构建高质量细胞显微图像数据集:从数据采集到模型评估的完整指南

简介&#xff1a;本资源是一个面向医学图像分析与兽医AI辅助诊断研究的显微图像数据集&#xff0c;专为深度学习模型训练与验证设计&#xff0c;适用于计算机视觉初学者及生物医学工程方向的研究者开展细胞识别、分类与量化任务。数据集共2000个XML标注文件&#xff08;98.51MB…

作者头像 李华
网站建设 2026/8/30 9:41:52

Harness与CI Buddy:地产行业AI助手工程化落地路线

最近身边不少朋友在讨论一个现象&#xff1a;各类大模型助手越来越强&#xff0c;但真要放到具体行业里用&#xff0c;总会卡在“能聊但不能干活”这一步。尤其是地产行业&#xff0c;置业顾问、客研、策划、运营手头都堆着数据&#xff0c;却很难让 AI 直接输出可用的结果。这…

作者头像 李华
网站建设 2026/8/30 9:37:21

3分钟上手Goose智能提示与记忆扩展:让AI代理记住你的项目

3分钟上手Goose智能提示与记忆扩展&#xff1a;让AI代理记住你的项目 【免费下载链接】goose an open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM 项目地址: https://gitcode.com/GitHub_Trending/goo…

作者头像 李华
网站建设 2026/8/30 9:36:59

用Brainscope观察ESP32上微型LLM的思考过程

你终于把一个量化的语言模型塞进了一块 ESP32 开发板。它真的能跑起来&#xff0c;能根据你输入的提示词吐出短句。你兴奋了几分钟&#xff0c;然后开始盯着串口输出问自己&#xff1a;它到底是怎么从上一个 token 走到下一个 token 的&#xff1f;如果它这次输出了一个奇怪的内…

作者头像 李华
网站建设 2026/8/30 9:36:34

现在手机+电脑全部都在自动化

我太厉害了&#xff0c;这等于我有4个员工给我干活&#xff0c;而且每天工资只要1块钱----宽带0.5元&#xff0c;其他0.5元而且这4个员工的效率可能相当于10多个也不一定呢。。。。。。。。

作者头像 李华