<!-- title: 拆产线后台四件：拒稿有人签收了 -->

# 拆产线后台四件：拒稿有人签收了——工作流自动化线第5轮·后台件首拆

## 概述

前四轮工作流线都在逛货架：部署件、CI件、监控件、编队列，拆的都是「市场上卖什么」。本期反过来，开后台柜：把这条日夜运转的内容产线自己装的四件后台件全部首拆——执行位 `task_runner.sh` v3、审计闸 `dedup_gate.py`、发布闸 `publish.sh` v4、监控位 `watchdog.sh`，四件全部实读源码，逐段对账。核心发现一句话：**货架四席卖的全是「会调 API 的手」，后台四件凑出来的恰恰是货架最缺的东西——制度。** 退出码协议、三层查重、fail-open 审计、token 窗口换班制，没有一样能 `npm install`。更有意思的是一份五个月的进化证据：五月版执行器里拒了稿没人签收，九月版签收了。制度不是设计出来的，是踩坑踩出来的。

## 后台地图：一条产线的四个后台工位

```mermaid
flowchart TD
    WD["watchdog 每30分钟巡检"] -->|进程消失| MS["master.sh 排班"]
    WD -->|满4小时新窗口| RS["清账本 换班重开"]
    MS --> TR["task_runner v3 当班"]
    TR -->|禁写盘 只收stdout| ART["稿件初稿"]
    ART --> DG["dedup_gate 查重闸"]
    DG -->|0 通过| PB["publish.sh 发布闸"]
    DG -->|2 判重| RJ["弃稿并记黑名单"]
    DG -->|3 闸坏放行| PB
    PB --> IDX["登记标题索引"]
    PB --> PG["重建分页 后台预渲染"]
    DR["generate_daily 收工日报"] --> PB
```

四件后台件没有一件直接「生产内容」：执行位管跑、审计闸管拦、发布闸管上线、监控位管换班。货架上的件拼的是能力，后台四件拼的是秩序。

## 评测对比表

| 件（工位） | 功能完整度(25%) | 设计质量(25%) | 实战效果(20%) | 上手难度(15%) | 在产/迭代(15%) | 加权 |
|------|------|------|------|------|------|------|
| watchdog.sh（监控位） | ★★★★ | ★★★★ | ★★★★★ | ★★★★ | ★★★★ | **4.2** |
| dedup_gate.py（审计闸） | ★★★★ | ★★★★★ | ★★★★ | ★★★★ | ★★★ | **4.1** |
| task_runner.sh v3（执行位） | ★★★★★ | ★★★★ | ★★★★★ | ★★ | ★★★ | **4.0** |
| publish.sh v4（发布闸） | ★★★★ | ★★★★ | ★★★★ | ★★★★ | ★★★★ | **4.0** |

口径先立规矩：实战效果以「是否在产线调用链持续在岗」为唯一证据，四件全部在岗五个月以上，此项可完全核实；上手难度反向计分，分高=易上手；「在产/迭代」是自用件的社区活跃度替身，依据是各文件内部留存的版本注释日期（下文逐一引证）。四件分数咬得极近，后台件的世界没有明星，只有同事。

## 执行位：task_runner.sh v3，一份写进注释的退出码协议

文件头第二段就是全文最值钱的一行注释：`# Returns: 0=success, 3=rate-limited(429), other=failure`。这不是文档装饰——master 排班层真的按这三个值分岔：0 记成功、3 触发限流例程、其余记失败。回执有了编号，闸和账本才算接上了话。

它的第二个制度是**所有权分离**：调用模型时挂着 `--disallowedTools "Write Edit NotebookEdit"`——模型被禁止写盘，正文只能从 stdout 吐出来，落盘路径、文件名、归档全部由脚本说了算。部分发现页数据先行到位的栏目，连网页抓取工具也在禁用清单里，权限按任务最小化。产物落盘后还有一套验收线：体积必须大于 200 字节，首行必须是标题注释或一级标题，前三行出现「API Error」直接判废。

第三套制度是**进料纪律**：提示词末尾按固定顺序拼进今日已写标题、拒稿黑名单、全局历史三个查重块——先把「不许写什么」喂进去，比事后拦便宜得多。小 Glossary 栏目甚至有一个 `mkdir` 实现的自旋锁加游标文件：拿锁最多等 15 秒，抢不到就强行破门，然后按游标跳过所有已写过的名词及其英文缩写变体。

瑕疵也如实记档：v3 里有两段在 UTF-8 终端下读不出来的乱码模板段（一段是二轮改稿指令、一段是搜索角度池），每天照常被拼进提示词，模型看不懂，产线照常跑——最典型的一笔技术债，没人回头审模板。另有一处死代码：mermaid 渲染调用被注释停用后，`render_exit=$?` 接住的是上一条日志命令的返回值，永远是 0。

## 审计闸：dedup_gate.py，一张 fail-open 的两段式考卷

昨天本栏对过账：验收岗、发薪岗、审计岗，货架上三十七席没人坐。今天开后台柜发现，审计岗的前半张桌子其实早有主——这台查重闸九月十四日就上线了，两段式：**脚本初筛**（标题做中文二元组，Jaccard 相似度 0.50 或 difflib 0.60 以上列为疑似，最多取前三对）+ **大模型终审**（疑似对交给 claude CLI，只许输出一行 REPEAT 或 OK 加二十字理由，超时 180 秒）。

最有价值的是它的退出码三态：0 放行、2 判重拒稿、3 内部错误——**放行**。注释写得直白：「放行，不阻塞产线」。审计闸的第一设计原则不是严格，是可用性：闸自己坏了不能把整条线憋死。与之配套的是黑名单回流：被判 REPEAT 的标题写进 `rejected_titles.txt`，而这份名单又被执行位拼进每天每篇的提示词当最高优先级禁令——**拒过的稿会变成后来的稿不许踩的线**，审计结果反哺选题，这是货架件里没有见过的闭环。

终审判词本身也值得抄走：「同一事件/同一产品/同一技术点且角度雷同算重复；仅同领域不同事件不算。」二十几个字，把「重复」的定义钉死在事件与角度上，而不是词面上。九月二十日到二十五日五天里，闸上又加装了三道精确快闸：同名标题直接拒、telecom 系栏目同术语只许一篇、games 栏目同仓库只许一篇——模糊层之前先走精确层，能不惊动大模型就不惊动。要说边界：它判的是选题重复，不是交付质量，「稿子写得好不好」那张考卷，货架上和产线上都还没人出。

## 发布闸：publish.sh v4，登记在发布之后

发布闸干五件事：按栏目路由目标目录（telecom-3gpp 还会解析文章内部的 domain 注释二次分流）、标题精确查重兜底（命中索引立即 `REJECTED-DUPLICATE-TITLE` 并 exit 1）、补页脚、往栏目 README 的「最新文章」下插链接并把列表裁到五十条、后台异步跑预渲染刷新 sitemap。

最讲究的是**登记时序**：标题索引的登记动作放在文件拷贝成功之后，注释原话是「发布成功登记标题，防索引陈旧复发」——先上车后补票，反过来就会出现「索引里有、站上没有」的鬼文章，查重闸会永远拒掉一个其实没发过的选题。顺序即正确性，这一行注释值一次事故复盘。预渲染用后台子进程异步跑、失败静默，也是同一个取向：发布闸不因装饰性步骤阻塞。

债务同样清楚：youtube 栏目的 domain 分流里 design 和 health 两个分支各写了两遍——publish.sh 和执行位各错了一处，复制粘贴的案底留在了两个文件里。另外整个发布闸只有「上」没有「下」，不存在 unpublish，发错的文章只能手工删。

## 监控位：watchdog.sh，从「看着」改成「踹门」

货架监控位的老住户 sentry 被本栏判过「睡着」，因为监控件普遍只报数不行动。产线这台看门狗相反，它只有一件事：踹门。crontab 写死 `17,47 * * * *`——每半小时巡一次，刻意避开整点；进来先用 pgrep 查排班长是否在岗，在岗就走人。不在岗时分四种情况落日志再动手：没有状态文件、跨入了新的一天、任务没跑完进程死了——直接重启；以及最有意思的第四种：**今天的活干完了，但距离上次收工已满四小时**——注释写着「GLM 每 5 小时重置，取 4 小时做阈值」，于是清空已完成/已失败账本、周期计数加一、换班重开。**token 窗口被当成了班次**，限流不是异常，是作息表。

一处耐人寻味的留痕：周末与晚间静默期的判断代码还完整留在文件里，但条件被写死成 `if false` 停用了——功能关了，决策现场保留。短板也明摆着：它踹门只写 watchdog.log，没有任何外呼通道，半夜重启十次，没有人会知道——监控位的最后一公里（通知）还空着。

## 五个月的进化对账：拒稿终于有人签收

后台柜里压着一份五月十六日的旧版执行器（backup_v1，1.6KB）。它调用发布闸之后不检查退出码，拒稿发生时照样打出「Task completed」；文件最后一行是注释 `# Record in history`，注释下面没有代码——一个没兑现的承诺。五月版的产线：闸会拒稿，但没人签收回执，账本把被拒的稿记成完稿。

九月二十日的 v3（19KB）把这个坑填上了：查重闸返回 2，执行器弃稿、记日志、exit 1——回执进了协议，账本不会再把废稿记成业绩。加上渲染工装从构建期挪去了浏览器端（构建位退休）、退出码协议写进文件头，五个月里这套后台长了三样东西：闸、回执、时序。货架件至今没有这三样，不是工程师不会写，是**制度没法预先设计，只能踩坑长出来**——而货架的商业模式恰恰只允许卖「一次装好」的能力，不允许卖「挨过打」的伤疤。

## 想给自己的 Agent 产线配后台？先抄这三招

```bash
# 招式一：把退出码协议写进脚本头，调用方按码分岔
# Returns: 0=success, 2=rejected, 3=gate-broken(pass)
python3 gate.py "$ARTICLE"; rc=$?
case $rc in 0) bash publish.sh "$ARTICLE";; 2) rm "$ARTICLE";; 3) bash publish.sh "$ARTICLE";; esac

# 招式二：审计闸 fail-open——闸坏了放行，绝不静默吞稿
# 招式三：把资源窗口当班次——满 N 小时清账本、周期+1、重开
```

配一条 SKILL.md，让闸可以被人话召唤：

```markdown
---
name: publish-gate
description: 发布前对稿件执行查重与登记。当用户说「发布」「发出去」「上线这篇」时使用。闸只判放行或拒稿，不改稿。
---
1. 先跑精确层（同名/同术语/同仓库索引），再跑模糊层（相似度初筛+终审单判词）
2. 退出码协议：0=放行 2=拒稿 3=闸坏放行，禁止任何静默路径
3. 拒稿写入黑名单，黑名单回流到选题提示词
4. 登记索引必须在发布成功之后
```

## 推荐排行榜

- **制度含金量**：dedup_gate（fail-open+黑名单回流）＞ task_runner v3（退出码协议）＞ watchdog（窗口换班制）＞ publish.sh（登记时序）
- **最值得抄的三招**：退出码协议写进文件头、审计闸 fail-open、资源窗口当班制
- **技术债榜**：乱码模板段 ＞ 死调用与假返回值 ＞ 双份 case 分支 ＞ 静默期 if false 留尸
- **空位榜（后台视角）**：通知通道（踹门没人知道）＞ 验收闸（判合格与否）＞ unpublish（只上不下）

## 结语

第五轮把镜头从货架转向后台，结论反而更清楚了：部署、CI、监控、编队四个席位上，市场卖的全是「接活的手」；而一条产线真正能日夜运转，靠的是后台那几样不起眼的制度——回执有编号、闸坏了放行、登记在发布之后、限流当班次。这四样今天在货架上一样都买不到，因为它们全是伤疤的化石。下注方向依旧写在墙上：谁把「挨过打的制度」封装成件，谁就补上了货架与产线之间最宽的那道缝。

## 参考来源

1. 本机产线文件 `task_runner.sh`（v3，含退出码协议与查重回执逻辑）、`publish.sh`（v4）、`dedup_gate.py`、`watchdog.sh`、`generate_daily.sh`、`backup_v1/task_runner.sh`（五月旧版） — 本文全部代码引用，实读于产线环境
2. [anthropics/skills](https://github.com/anthropics/skills) — 官方 Skill 仓库，SKILL.md 规范（name/description 触发机制）出处
3. [skills.sh](https://skills.sh) — Skills 生态站与热门榜单，本文「货架」口径所指对象
4. [mcpservers.org/agent-skills](https://mcpservers.org/agent-skills) — Claude Skills & Agent Skills Library，监控/部署类目对照口径
5. [mikehasa/golive-skill](https://github.com/mikehasa/golive-skill) — 部署位现役增速冠军（本栏10月2日对账：996→1167星），本文「部署件管到跑起来」的对照样本

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
