【免费下载链接】onWatchTrack AI API quotas across Synthetic, Z.ai, Anthropic (Claude Code), Codex, GitHub Copilot Antigravity in real time. Lightweight background daemon (50MB RAM), SQLite storage, Material Design 3 dashboard. Zero telemetry.项目地址https://gitcode.com/gh_mirrors/on/onWatch点击查看免费下载onWatch 是一款轻量级的 AI API 额度监控守护进程内存占用 50MB实时追踪 Claude Code、Codex、GitHub Copilot 等 AI 服务的配额。本文将拆解 onWatch 的自我更新机制只需运行一条onwatch update命令程序就能完成版本检查、安全下载、二进制替换并借由 systemd 或 launchd 的生命周期管理自动重启全程零手动干预。一键自我更新三步完成 Check → Apply → Restart自我更新的核心逻辑集中在 internal/update/update.go整个流程像一条流水线阶段动作关键设计Check查询最新版本结果缓存 1 小时避免频繁请求Apply下载并替换二进制魔数校验 原子替换Restart交由服务管理器重启自动识别 systemd / launchd版本检查三级回退策略告别 403 限流Check()并不傻乎乎地只打 GitHub API 一个接口。在 update.go 的 fetchLatestTag() 中设计了三道防线首选releases/latest接口遇 5xx 自动重试 3 次回退一github.com/releases/latest网页 302 重定向 —— 它不走 API 域名天然绕开匿名调用每小时 60 次的限流这是 NAT 共享出口 IP 场景下 403 的救命方案回退二releases 列表接口仅在前一次失败是瞬时性错误时尝试。另外若环境中设置了GITHUB_TOKEN会自动带上 Bearer 令牌把限流额度从 60 次/小时提升到 5000 次/小时。安全替换先验魔数再原子换二进制下载环节有两个细节值得新手学习魔数校验在 validateBinary() 中文件前 4 字节必须是 ELFLinux、Mach-OmacOS或 PEWindows的执行头防止把 HTML 错误页当成二进制写入原子替换新文件先下到同目录的onwatch.tmp.*临时文件chmod 0755后再替换。Unix 上采用「删除旧文件 → rename 新文件」策略——内核会保住正在运行的 inode直到进程退出Windows 上退化为「备份-rename」双步策略失败还能自动回滚。重启策略把控制权交还给系统替换完成后Restart()并不自己拉起进程而是按环境三选一systemd 环境 → systemctl restart service 由 systemd 全权接管 launchd 环境 → launchctl kickstart -k label 由 launchd 全权接管 独立运行 → 直接 spawn 新进程 PID 文件接管这个「不自作聪明」的设计是整篇的精髓谁拥有生命周期谁负责重启避免更新后产生游离的野进程。systemd 生命周期管理LinuxRestartalways 的妙用一键生成 unit 文件安装脚本 install.sh 会根据是否使用 root 创建两种 unit系统级/etc/systemd/system/onwatch.serviceWantedBymulti-user.target用户级~/.config/systemd/user/onwatch.service并顺手开启loginctl enable-linger让服务在注销后依然存活unit 文件的关键参数[Service] Typesimple ExecStart${BIN_DIR}/onwatch --debug Restartalways RestartSec5自我更新的点睛之笔MigrateSystemdUnit 自动修复这是最容易忽略、也最巧妙的部分。旧版本安装的 unit 可能写着Restarton-failure而自我更新后旧进程以退出码 0 结束——on-failure策略下 systemd不会拉起新二进制更新就「静默失效」了。onWatch 的解法在 MigrateSystemdUnit()每次启动包括更新后的新进程都会检查 unit 文件发现Restarton-failure→ 自动改写为Restartalways同步把RestartSec10收紧为RestartSec5加速重启立即执行systemctl daemon-reload让新策略生效。时序上还有个小心机更新后的子进程先完成 unit 修复和 daemon-reload再去杀掉父进程见 main.go 启动流程。此时 systemd 追踪的还是旧 PID父进程一死systemd 立刻以新的Restartalways策略拉起新二进制——即使旧版本的 Restart() 代码有 bug更新依然能完成闭环。服务名检测同样优雅通过INVOCATION_ID环境变量判断是否运行在 systemd 下再解析/proc/self/cgroup中的0::/system.slice/onwatch.service得到真实 unit 名失败则回退到onwatch.service见 DetectServiceName()。launchd 生命周期管理macOSKeepAlive 的取舍LaunchAgent 的生成与加载macOS 侧由 internal/service/launchd.go 负责。onwatch service install会在~/Library/LaunchAgents/dev.onllm.onwatch.plist写入任务描述然后依次执行launchctl bootout → enable → bootstrap → kickstart见 Install()其中enable必须先于bootstrap否则历史上被disable过的 label 会直接加载失败。plist 核心字段keyRunAtLoad/keytrue/ keyKeepAlive/key dictkeySuccessfulExit/keyfalse//dict keyThrottleInterval/keyinteger10/integer为什么 KeepAlive 不直接写 true这是一个很值得学习的取舍见 RenderPlist() 注释若KeepAlive true连用户手动onwatch stop都会被 launchd 秒拉回来「关不掉」设为{SuccessfulExit: false}后退出码 0主动停止→ 保持停止异常崩溃 → 自动重启。配合ThrottleInterval 10防止崩溃风暴刷爆 CPU这就是「优雅停止」与「崩溃自愈」共存的答案。更新时的重启走launchctl kickstart -k强制杀死并重新拉起见 Restart()整个过程 launchd 始终是唯一进程属主agent 不丢失、自启属性不丢失。用户视角只需要两条命令对普通用户来说以上机制完全透明日常只需要onwatch update # 一键自查 下载 替换 服务管理器重启 onwatch service install # 注册开机自启macOS/Windows onwatch service status # 查看自启状态 onwatch service uninstall # 移除自启onwatch update的执行路径在 runUpdate()更新成功后还会自动提示是否开启开机自启offerAutostart避免「更新了但重启电脑后服务没起来」的经典翻车场景。服务管理命令实现见 cmd/onwatch/service_cmd.go。相关文件速查模块路径职责自我更新器internal/update/update.go版本检查、下载、替换、重启launchd 管理internal/service/launchd.gomacOS LaunchAgent 全生命周期服务 CLIcmd/onwatch/service_cmd.goonwatch service子命令、更新后重启编排安装脚本install.shLinux systemd unit 生成与激活自更新测试internal/update/update_test.go各分支路径的单元测试小结onWatch 的自我更新可以总结为三层保险检查层三级端点回退 1 小时缓存 Token 提额版本查询几乎不会失败替换层魔数校验 临时文件 原子 rename任何时刻中断都不会留下损坏的二进制重启层不自己 fork而是把重启交给 systemd 或 launchd并用MigrateSystemdUnit提前修正Restartalways策略确保「旧进程一死新进程必生」。这套「检查—替换—委托重启」的模式对任何需要长期驻留的命令行工具都是很好的参考范本。赞分享【免费下载链接】onWatchTrack AI API quotas across Synthetic, Z.ai, Anthropic (Claude Code), Codex, GitHub Copilot Antigravity in real time. Lightweight background daemon (50MB RAM), SQLite storage, Material Design 3 dashboard. Zero telemetry.项目地址https://gitcode.com/gh_mirrors/on/onWatch点击查看免费下载相关推荐鸣潮自动化辅助工具 ok-ww 完整指南把 2 小时日常压缩到 15 分钟鸣潮自动化辅助工具 ok ww 完整指南把 2 小时日常压缩到 15 分钟 周五晚上八点打开游戏任务面板上是那份熟悉的清单体力、日常、周本、声骸一项项RPA计算机视觉Balena Etcher 完整指南三步烧录带校验的 SD 卡与 U 盘启动盘Balena Etcher 完整指南三步烧录带校验的 SD 卡与 U 盘启动盘 Balena Etcher 是一个跨平台的镜像烧录工具把 ISO、IMG 等桌面应用嵌入式开发工具rkt 与 systemd 集成实践指南用 systemd 管理 rkt 容器全生命周期rkt 与 systemd 集成实践指南用 systemd 管理 rkt 容器全生命周期 rkt 从设计之初就是为配合 systemd 等 init 系统而生容器运行时云原生网络上一篇Sunshine故障排除大全从新手到专家的完整解决方案下一篇x-algorithm 如何实现亚毫秒内网取数Thunder 基于 Kafka 与内存 PostStore 的实时帖子存储设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考