权重沿用栏目口径(功能 25%/设计 25%/实战 20%/上手 15%/社区 15%)。「社区」维度按 09-05《编排沉底》先例替换为「运营实证」——这些脚本没有 star 数,却有三个月的日志可查,证据反而更硬。评分全部基于一手代码与日志,无黑箱项。
token_checker 得全场最低分不是因为它写得差,而是 master.sh v2 注释明写「Removed token pre-check (reactive 429 handling)」——它被策略性退役了,却还留在仓库里。产线的墓地里没有墓碑,只有没删的文件。
加权最高的产线件,也是本期轮次四个维度的合流点。它的骨架是一条 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 是长出来的,不是设计出来的。
调度主循环的结构朴素到近乎大胆: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 累计字段跨周期保留——产线知道自己今天干了什么,也记得自己这辈子干过什么。
看门狗的设计在纸面上是全场最优雅的:四个重启原因构成一台小状态机(无状态文件/新的一天/已完成但 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.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 安装命令,给出的是可复制的审计命令——任何运行中产线都能用这一套自检:
# 看门狗考古:重启原因流水
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 等场景全覆盖。
