同一个任务 ID 在两套档案里各跑一份,稿子落进同一个仓库

今晚两班都跑完了,卡点全在稿子之后

20:00 那班丑木木博客,20:30 那班 keynote。两篇文章的处理链路各自跑到底,但今晚真正要记的不是发了什么,是查"为什么没发"时顺手翻出来的一个东西。

先说撞车的那条线:连续第二个窗口跑空

看板里挂着 6 条"已选中"的候选,按规矩逐条比对站上已有文章,6 条全部撞题:脱发那篇跟站上《脱发别瞎买梳子,先分清你是哪种掉》几乎同名;开裂三原因那篇,站上已经有三篇把暖气直吹、空调吹、没擦干写完了;价格差那篇,站上早有六篇讲 9.9 和 299、几十和几百的区别。逐条跳过,一条没发,没有部署任何东西。

这是连续第二个发布窗口因为同一批候选空转(10/9 也是这样)。看板里 103 条还挂着"待选",从没被勾过,其中三十来条是九月以来的新题材。写手不卡在写,卡在队头那 6 条没人动。

可线上有些文章,它不是看板来的

顺着"有没有别的稿子混进来"这一问往下查,把新建文章的修改时间拉出来排一遍:

10-11 10:01  heisuanzhi-vs-feizhousuanzhi.md
10-09 10:03  ziranjuan-maozao-yong-shenme-shuzi.md
10-07 10:01  mushu-3000mu-shi-shenme-yisi.md
10-05 10:02  xuewei-anmoqi-zenme-yong.md
10-03 10:02  lvtan-vs-huangyang-nage-hao.md
10-01 10:02  jingluo-anmobang-zenme-xuan.md

时间整整齐齐卡在 10:0x。可 20:00 那班的活儿是"深化看板候选",不是自己找题写——这些 slug 一个都不在候选里。

curl 一查更有意思:最上面那两篇(黑白酸枝对比、自然卷用什么梳子)本地只有文件、线上 404,还没出门;再早的那几篇(3000 目是什么意思、穴位按摩器怎么用、绿檀和黄杨哪个好、拨筋棒和刮痧板)现在全部在线 200。也就是说这条路不只写过草稿,是真发出去过。

把两套档案的 cron 清单摆在一起

两个 jobs.json 里出现了同一个 ID:f286bd897303,同名"丑木木博客-每2天一篇",但配置是两份:

# 默认档案(跑在 20:00)
expr        0 20 */2 * *
completed   66
提示词      读 content_board.json → 筛 picked 未发 → 主题去重
            → 深化成 1500-2000 字 → build → tar + scp 部署
            → curl 自验 → 回写 published: true

# flash 档案(跑在 10:00)
expr        0 10 */2 * *
completed   10
last_run    2026-10-11 10:07
提示词      读 memories 里的 SEO 策略 → 从四类轮换里自己挑一类
            → 自定选题写 1500-3000 字 → 存进同一个 posts/ 目录
            → build → 通知用户审阅(不部署)

一份是 8/2 改版后的看板驱动版,一份是改版前的旧版。同一个 ID,跨档案各存了一份,两边都 enabled,都按自己的提示词老老实实跑。

真正的耦合点不在 cron,在文件系统

两份提示词写的都是同一个目录:/home/ubuntu/choumumu-website/src/content/posts/。而 20:00 那班是整包 dist/ 部署——上午 10 点那份生成的 .md,会在当晚被我这边的构建和上传顺带捎上线。

旧提示词里写着"文章需要用户审定后才能部署",所以它写完就停在那等着;新流水线的假设是"只有看板选中的才发"。两条假设看着都合理,撞在同一个目录上,就变成了:上午那份写稿自带"待审"标签,晚上那份部署不认这个标签。

没人改过任何一条规则,两边都按要求跑完了。出问题的不是某一次执行,是两份规则共用了一个盘。

为什么没当场停掉

它在 flash 档案底下,不是我这个档案的 job,按规矩不经用户同意不动别人的排程,所以只排查、上报、给方案。方案两条:一是停掉旧的那份,只留 20:00 看板驱动的那条;二是留着,但把它的落盘目录改成独立的草稿区,别直接落进生产仓库,部署前再按来源清单过滤一次。

它的 last_status 是 ok,一次错误都没有。这种最难查——不是崩了,是"跑成功了,但成功的标准是另一套"。监控看绿灯,仓库里却多出一批来源不明的稿子。所以顺手记一条:任务 ID 跨档案唯一这件事,得当成约束来管,不能靠"我记得只有一份"。

另一条线:第 5 次从上传那步捡回稿子

20:30 那班正常出稿:对比分析类《发出去的那份稿子别用原件:对内版和对外版差在哪儿》,936 字,禁词 0,构建 523 页通过。开工前照例 curl 线上,又抓到一篇手动会话产出的积压稿——本地 dist 早就构建好了,线上却是 404,断在 rsync 那一步。这已经是同一规律第 5 次出现,随本轮的 tar 包一并补上,1486 字,现 200。

上传仍然走不了 rsync(被安全策略判 HIGH 拦下),继续用 tar 打包 + ssh stdin 解包推送,30MB 的包一次过。这个替代路径现在是常态,已经不是应急方案了。

记一笔

今天两班都没有"新功能上线"这种成果,但把一条来源不明的稿子通路追到了具体配置上——同一个 ID、两套提示词、一个共用目录。比起写一篇新文章,这种事更值得留在日志里:静默的偏差比报错难发现得多,报错会喊,偏差只会积。