<!-- title: 拆自家产线：胶水层七件审计 -->

# 拆自家产线：cron、状态机与标记文件——Skills 之外的无人值守真相

## 概述

## 一、选题逻辑：第三层终于轮到了

## 二、评测对比表

权重沿用栏目口径（功能 25%/设计 25%/实战 20%/上手 15%/社区 15%）。「社区」维度按 09-05《编排沉底》先例替换为「运营实证」——这些脚本没有 star 数，却有三个月的日志可查，证据反而更硬。评分全部基于一手代码与日志，无黑箱项。

> token_checker 得全场最低分不是因为它写得差，而是 master.sh v2 注释明写「Removed token pre-check (reactive 429 handling)」——它被策略性退役了，却还留在仓库里。产线的墓地里没有墓碑，只有没删的文件。

## 三、主拆一：task_runner.sh——每篇文章要过的三道门禁

加权最高的产线件，也是本期轮次四个维度的合流点。它的骨架是一条 30 分钟硬超时（`timeout 1800`）的内容 CI，最值得逐段看的是**验收段**：产出文件先过体量门（`wc -c` 大于 200 字节），再过格式门（首行必须匹配 `^<!-- title:` 或 `^# `），最后过污染门（前三行出现「API Error」即整篇作废删除）。三道门全过才进发布段：先双路 staging（`sync-staging/` 存原文、`sync-structured/` 按栏目路由到站点目录树），再交给 publish.sh，最后把标题写进 topic_history 供后续查重。**验收先于发布**——这条顺序是整棵脚本树的宪法，也回应了《质检层》那期「产出不再稀缺、可信才稀缺」的论断：可信在这里不是理念，是 `exit 1` 的位置。

两个「活体缺陷」值得单独记。**其一，编码事故至今活在产线里**：脚本 v3 新增的「关键去重指示」注入块（round>1 时拼进提示词尾部的那段中文）已经乱码，`SEARCH_ANGLE` 角度数组同样乱码——但文章照常出，因为主提示词本体冗余地写着同样的规则，乱码块被模型自然忽略。**冗余兜住了事故，而事故没有被告修**，这是任何长期运行的胶水系统的真实生态。**其二，一段复制粘贴 bug**：youtube-digest 的目录路由 case 分支里，`design` 与 `health` 两个分支各出现了两次（task_runner.sh 237-239 行），第二个映射永远走不到——无害，但说明这段 case 是长出来的，不是设计出来的。

## 四、主拆二：master.sh + state.json——一台用 jq 拼出来的状态机

调度主循环的结构朴素到近乎大胆：`while true` 里依次查运行时长上限（`MAX_RUNTIME_HOURS=24`）、静默期、日产量上限（`MAX_ARTICLES_PER_DAY=200`），然后向 state.json 要下一个任务。状态管理全程只有 jq 一种武器：`get_next_task_v2` 把 completed 与 failed 两张表合并去重得到 skip_keys，再和全任务矩阵做差集——**用一次 set difference 实现了断点续跑**，不需要数据库，不需要锁服务。退出码被约定成一套三值协议：0 成功、3 限流、其余失败，主循环据此分流——限流时 `sleep 18000`（五小时）等 token 窗口重置，失败则记入 failed_tasks 由下一轮差集自然跳过。

两个数字值得对着看。其一，配置里 `MAX_CYCLES_PER_DAY` 在 master.sh 里的默认值是 8，但 settings.sh 末尾覆盖为 4——**默认值和配置值的张力**是长期演化脚本的常见地层。其二， watchdog 重置周期时只清 `completed_tasks`、`failed_tasks` 和产量标记，`stats` 累计字段跨周期保留——产线知道自己今天干了什么，也记得自己这辈子干过什么。

## 五、主拆三：watchdog.sh——三周没写日志的看门狗

看门狗的设计在纸面上是全场最优雅的：四个重启原因构成一台小状态机（无状态文件/新的一天/已完成但 token 窗口满 4 小时/进程死亡），每次重启都把原因写进 watchdog.log，token 窗口重置时还顺手把 state.json 的周期号加一。`pgrep -f master.sh` 的互斥守卫、错峰到 17 分和 47 分的 cron 排班，都是教科书级的细节。

但一手日志揭示了一个悬案：**watchdog.log 的最后一条记录停在 2026-07-12**，此后近两个月一片空白；而 state.json 的日期字段同样冻结在 2026-07-12（cycle 4，累计 106 成功/51 失败）。可产线明明在 09-03 至 09-05 每天发布 165-221 篇。两个化石指向同一个推断（※据日志痕迹推断，未核验 crontab）：运营方式从「watchdog 守护 master 长循环」切换成了「外部按需拉起 harvest_one 单任务」，看门狗连同它守护的状态机一起退役，但没人删除它们。脚本头部那两段被 `if false` 包起来的静默期检查是同一气质的遗迹——**功能不是被删掉的，是被注释掉的**，注释掉的代码就是运营史本身。

## 六、主拆四：harvest_one 族——标记文件对长连接的胜利

`harvest_one.sh` 只有八行，却藏着整个产线最硬的一条运维经验。它用 `setsid` 把单任务完全脱离终端跑，把 PID 写进 `/tmp/hv_<tag>.pid`，完成时把退出码写进 `/tmp/hv_<tag>.done`——注释里直白写着动机：「本地驱动通过轮询标记文件判断完成，绝不依赖长连接（规避 plink 会话假挂起）」。这是被真实事故教育出来的设计：远程会话会假死，文件不会。配套的 `harvest_cancel.sh` 按 PID 杀整个进程组再清三个标记文件，八行以内完成了「取消一次未完成任务」的全部语义。今日日志里 00:38:50 三个任务同时启动的记录，说明这套脱管机制正承担着实际的并发调度。

## 七、产线全景与生态对照

## 八、模式提炼：胶水层的四条设计规律

**规律一：文件优于连接。** 完成信号用标记文件轮询，不用长连接等待；状态用 json 文件，不用服务。凡是要跨进程、跨时间、跨网络传递的事实，落盘。这与 planning-with-files「文件为本体、上下文只是缓存」是同一条共识，但产线层把它贯彻得更彻底——连「取消」都是删文件。

**规律二：验收门是 exit 1 的排布艺术。** 体量门→格式门→污染门→才发布，每个门就是一个 `exit`。对比《回滚真空》的发现——自动化赛道没有后悔药——这台产线的答案朴素得多：**与其做回滚，不如把不合格的产出挡在发布之前**，被删掉的文件不需要回滚。

**规律三：冗余是乱码的救生圈。** 乱码的注入块没有引发事故，因为主提示词里同样的规则写了两遍。长期运行的系统里，修不完的缺陷和修不完的日志，靠冗余活命，靠验收兜底。

**规律四：退役要留墓志铭。** token_checker 没删、`if false` 没删、watchdog 没删——它们是运维决策的化石记录。代价是读代码的人（包括写下它们的自动化流程自己）要靠日志考古才能分清哪些代码活着。给后来者的建议：可以不删，但请在文件头写一行「RETired since YYYY-MM-DD, reason: ...」——这句墓志铭的成本是十秒，考古的成本是两小时。

## 九、复现审计的命令

产线件不是市场 Skill，没有 `npx` 安装命令，给出的是可复制的审计命令——任何运行中产线都能用这一套自检：

```bash
# 看门狗考古：重启原因流水
tail -30 logs/watchdog.log
# 状态机体检：状态文件与今日进度对不对得上
jq '{date, cycle, stats, completed: (.completed_tasks|length)}' config/state.json
# 产出验收门复现：首行正则 + 体量门
head -1 output/$(date +%F)/skills-ecosystem-*.md | grep -c '^<!-- title:'
find output/$(date +%F) -name '*.md' -size -200c | wc -l   # 应为 0
# 当日吞吐：发布数与标题入库数应相等
grep -c Published logs/$(date +%F).log
grep -c 'Recorded title' logs/$(date +%F).log
```

## 十、推荐排行榜

## 参考来源

> [!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)
