共享节点冲突场景
下列场景应写入值班手册,与队列、锁、属主同一套说法。
- 断线即丢进度:裸 SSH 下 SIGHUP 结束 shell,长时间编译或归档在未
nohup时直接中断。 - 双附着同一逻辑环境:两人以为各自独立,实际共享同一用户主目录或同一克隆路径,引发重复
pod install、半写入交错。 - CI 与人工抢资源:无头任务占
flock或 Simulator,交互窗格无限等待,表现为「抢占」。 - 长寿命会话陈旧状态:tmux 里残留旧
xcode-select、旧环境变量,与流水线假设不一致。
抢占指更高优作业、锁或 GUI 独占使会话假设失效;须用车道、分账户、分目录或多节点编码优先级。
tmux vs 裸 SSH 会话对比表
选型时记住:tmux 管耐久,不管隔离。
| 维度 | 裸 SSH 会话 | tmux(命名 + 团队规范) |
|---|---|---|
| 断线后存活 | 否,除非 disown/nohup 等补丁 | 是,tmux attach -t 名称 再连 |
| 多窗格可见性 | 单流,靠复制粘贴 | 分窗/分窗口;滚动缓冲区可团队统一上限 |
| 协作与审计 | 难认定「谁在哪个壳」 | 会话名可映射到人、工单或 CI 车道 |
| 与 CI 隔离 | 弱;同用户即同文件 | 仍弱;须分账户与路径 |
| 误用风险 | 网络抖动丢工作 | 「永久」会话藏陈旧环境、错 Xcode |
会话持久化决策矩阵
| 信号 | 优先策略 | 升级路径 |
|---|---|---|
| 笔记本 VPN 不稳、需反复重连 | tmux + SSH 保活(服务端与客户端 Alive) |
Wiki 固定「附着」命令与会话命名规则 |
| 单一共享缓存(Pods/npm 等) | 串行车道 + flock |
第二节点或缓存分区 |
| 同机 GUI 测试 + 无头 CI | 拆节点或严格时间窗 | 专用 Simulator 宿主 |
| 类生产应急排障 | 应急账户 + 临时克隆 | 轮换凭据与会话记录归档 |
最小 tmux 配置参数
统一 ~/.tmux.conf 或 /etc/tmux.conf 基线,避免终端行为不一致。
set -g mouse on— Terminal 与常见 SSH 客户端下鼠标与窗格选择。set -g history-limit 50000— 长 Xcode 日志可回看;内存紧的机型可调低。set -g default-terminal "screen-256color"(或已装 terminfo 时用tmux-256color)。setw -g aggressive-resize on— 多客户端附着时减少尺寸陈旧。set -g detach-on-destroy off— 单窗退出时尽量保留其余窗口,降低误杀整会话概率。
命名:禁止匿名会话;用 工号-工单 或 pool-ci-lane-2,仓库提供一行封装脚本。
SSH 服务端与客户端 Alive 与 tmux 并用,缓解 NAT 空闲断连。
用户/目录权限隔离步骤
- 身份拆分:
builder-ci与dev-shared(或每人账户);CI 不登录人工主用户。 - 组优先:共享树如
/srv/builds用 POSIX 组builders,需继承组写目录用chmod 2770,相关账户 profileumask 027。 - 每人工作根:
/srv/builds/<用户>/…或与团队 Git worktree/多克隆策略对齐的不相交路径。 - ACL 补缺:macOS 上仅对日志只读应急访问加 ACL;避免世界可写临时构建目录。
- 钥匙串与签名:分角色钥匙串;不在多人之间共用绑定 Apple ID 的交互会话——细节仍归权限隔离文。
验收:namei -l 自各 home 追到构建根;月巡检抓 777 与属主漂移。
构建队列与文件锁阈值 FAQ
问:为什么 tmux 要和 flock 同一叙事?
耐久壳易养成长进程,占建议锁或 Simulator/USB/钥匙串 UI;壳策略须与队列一致,否则整池被拖死。
问:待处理任务深度设多少合适?
全局或每车道建议约二十为软顶,超限显式失败并引导换节点或错峰;与文首所列构建队列专文中的排队告警(如等待 >5、>10)联动。
问:等锁与作业超时关系?
flock -w 必须远小于作业总超时。窗格等数小时通常是锁持有者僵死或临界区过大,应先治持有者而非怪网络。
构建会话抢占规避清单
发布前与排班交接可勾选:
- □ 共享机禁止未命名 tmux;会话名含人/工单/车道。
- □ 人机与 CI 分账户或分根目录,可变缓存不交叉。
- □
flock封装单一模板;锁文件路径与队列文档同源。 - □ 作业超时杀进程树并打日志(构建号、用户、时间)。
- □ GUI 与无头冲突持续出现时,拆节点或分时,而非加窗格。
- □ 每月清理「僵尸会话」:无附着超期、错 Xcode、未关闭 Simulator。
小结与下一步
三句话:tmux 管断线,目录与账户管隔离,队列与锁管公平。排队长期偏深或 GUI/CI 持续打架时,租用多节点比堆 tmux 窗格更符合 SLA。需要对照 MeshMac 方案请 购买页 看套餐与节点选择(免登录),连线与文档见 帮助中心;总览 首页,更多协作文见 博客列表与OpenClaw 多节点协作。