From 97b2ac02f13edd32d617c8cc12856babe3c01fd0 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Thu, 25 Jun 2026 20:06:21 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20pangolin=20runner=20launchd=20=E6=8C=81?= =?UTF-8?q?=E4=B9=85=E5=8C=96(start=20script=20+=20plist)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mac-pangolin-2 从临时后台进程改成开机自启的 launchd 服务,仿 jiu 的 com.jiu.act-runner: - deploy/runner/act_runner_pangolin_start.sh:等 jiu relay(13000)就绪 → 起 daemon → 退出自重启;PATH 含 docker/node/go(host 模式 job 要用) - deploy/runner/com.pangolin.act-runner.plist:RunAtLoad + KeepAlive - docs/ci-runner.md:持久化章节改为实际部署步骤(cp + launchctl load) 复用 jiu 的 relay 13000(端口已占,不另起)。 Co-Authored-By: Claude Opus 4.8 --- deploy/runner/act_runner_pangolin_start.sh | 28 +++++++++++++++++++ deploy/runner/com.pangolin.act-runner.plist | 23 ++++++++++++++++ docs/ci-runner.md | 30 ++++++++++++--------- 3 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 deploy/runner/act_runner_pangolin_start.sh create mode 100644 deploy/runner/com.pangolin.act-runner.plist diff --git a/deploy/runner/act_runner_pangolin_start.sh b/deploy/runner/act_runner_pangolin_start.sh new file mode 100644 index 0000000..0a53f11 --- /dev/null +++ b/deploy/runner/act_runner_pangolin_start.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# act_runner_pangolin_start.sh — pangolin CI runner(mac-pangolin-2)常驻启动。 +# +# 由 launchd(com.pangolin.act-runner)拉起、KeepAlive。 +# 复用 jiu 的 TCP relay 127.0.0.1:13000(mac 的 Shadowrocket 会拦 act_runner 这个 +# Go 二进制,直连 NAS gitea 失败;jiu 的 com.jiu.act-runner 已常驻一个 relay,端口 +# 已占,本脚本不另起、只等它可达)。详见 docs/ci-runner.md。 +# +# 部署:复制到 ~/bin/ 并 chmod +x;由 ~/Library/LaunchAgents/com.pangolin.act-runner.plist 引用。 + +export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" +export HTTP_PROXY="" HTTPS_PROXY="" http_proxy="" https_proxy="" + +CONFIG="/Users/wangjia/.act_runner_pangolin2_config.yaml" +RUNNER="/Users/wangjia/bin/act_runner" + +while true; do + # 等 jiu 的 relay(13000)就绪 —— act_runner 经它连 NAS gitea(192.168.3.200:3000)。 + until /usr/bin/curl -sf --connect-timeout 3 http://127.0.0.1:13000/api/v1/version >/dev/null 2>&1; do + echo "[$(date)] relay 13000 未就绪(jiu 的 runner 没起?),15s 后重试..." + sleep 15 + done + + echo "[$(date)] 起 act_runner(mac-pangolin-2,label nas,host 模式)..." + "$RUNNER" daemon --config "$CONFIG" + echo "[$(date)] act_runner 退出(code $?),10s 后重启..." + sleep 10 +done diff --git a/deploy/runner/com.pangolin.act-runner.plist b/deploy/runner/com.pangolin.act-runner.plist new file mode 100644 index 0000000..cb30008 --- /dev/null +++ b/deploy/runner/com.pangolin.act-runner.plist @@ -0,0 +1,23 @@ + + + + + + Label + com.pangolin.act-runner + ProgramArguments + + /bin/bash + /Users/wangjia/bin/act_runner_pangolin_start.sh + + RunAtLoad + + KeepAlive + + StandardOutPath + /tmp/act_runner_pangolin2.log + StandardErrorPath + /tmp/act_runner_pangolin2.log + + diff --git a/docs/ci-runner.md b/docs/ci-runner.md index abe1f95..64f410f 100644 --- a/docs/ci-runner.md +++ b/docs/ci-runner.md @@ -37,12 +37,25 @@ host: workdir_parent: /Users/wangjia/.cache/act-pangolin2 ``` -## 当前运行方式(临时,非持久) +## 持久化(launchd 开机自启) +仿 jiu 的 `com.jiu.act-runner`。文件在仓库 `deploy/runner/`: +- `act_runner_pangolin_start.sh` —— 启动脚本(等 jiu 的 relay 13000 就绪 → 起 daemon → 退出自重启)。 +- `com.pangolin.act-runner.plist` —— launchd(RunAtLoad + KeepAlive)。 + +**部署步骤**(一次性): ```bash -export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" -/Users/wangjia/bin/act_runner daemon --config /Users/wangjia/.act_runner_pangolin2_config.yaml +# 1. 文件就位 +cp deploy/runner/act_runner_pangolin_start.sh ~/bin/ && chmod +x ~/bin/act_runner_pangolin_start.sh +cp deploy/runner/com.pangolin.act-runner.plist ~/Library/LaunchAgents/ +# 2. 停掉临时 daemon(否则和 launchd 起的抢同一注册) +pkill -f act_runner_pangolin2_config.yaml +# 3. 加载常驻服务(开机自启 + 崩溃自重启) +launchctl load ~/Library/LaunchAgents/com.pangolin.act-runner.plist ``` -> ⚠️ 当前是后台进程,**mac 重启就没了**。要持久化见下「持久化 TODO」。 +之后 mac 重启 / 退出登录都会自动拉起。日志 `/tmp/act_runner_pangolin2.log`。 +卸载:`launchctl unload ~/Library/LaunchAgents/com.pangolin.act-runner.plist`。 + +> 依赖 jiu 的 relay(13000)常驻:jiu 的 `com.jiu.act-runner` 在 → relay 在 → 本 runner 能连 NAS gitea。 ## 已删除:mac-pangolin(第一次注册的,id 5) 第一次注册的 runner(label `nas`,config `~/.act_runner_pangolin_config.yaml`)。job 调试时已从 **gitea 删除注册**(API DELETE,204)。本机残留待清: @@ -54,15 +67,6 @@ rm -f ~/.act_runner_pangolin ~/.act_runner_pangolin_config.yaml rm -rf ~/.cache/act-pangolin ``` -## 持久化 TODO(让 runner 开机自启、不随 session/重启消失) -仿 jiu 的 `com.jiu.act-runner`(launchd + relay-aware start script): -1. 写 start 脚本(确保 relay 13000 在 → 起 daemon),仿 `~/bin/act_runner_start.sh`。 -2. 写 `~/Library/LaunchAgents/com.pangolin.act-runner.plist`(RunAtLoad + KeepAlive)。 -3. `launchctl load ~/Library/LaunchAgents/com.pangolin.act-runner.plist`。 -4. 加载前先停掉当前临时 daemon:`pkill -f act_runner_pangolin2_config.yaml`。 - -> 或者换路线:在 **NAS** 上给现有 runner 加 `nas:host` label + 重启,把 pangolin CI 迁到 NAS(Linux,更稳),mac 这个就可退役。 - ## 验证 - gitea → 仓库 Settings → Actions → Runners 应只见 **mac-pangolin-2**(online)。 - 向 `main` 开 PR 触发 9 个 job;首次全绿见 run #298(commit `65bd7c3`)。