Cron Scheduler — 按时间表生产工作

"按时间表生产工作, 调度与执行解耦" — cron 调度, 持久化或会话级。

Github 原文:shareAI-lab/learn-claude-code

如果你了解 Vibe coding 这个圈子,你就会知道这里面最多的产品就是日历、日程管理、todo 工具,虽然他们烂透了,但也说明时间管理和规划在所有人心里的重要性,AI 也是一样的,最好他也有个日程时间表来干活。

问题

闹钟不需要你盯着它才会响。你设好 7:00,到点它自己响,你在睡觉、在洗澡、在做饭,它都照响不误。

上一篇文章中,我们利用后台异步任务模块让 Agent 能后台执行慢操作,但所有操作仍然是你手动触发的。你说一句,Agent 动一下。“每天早上 9 点跑测试”、“每 30 分钟检查 CI 状态”,这些周期性任务不该需要人每次来推。

解决方案

Cron Scheduler — 按时间表生产工作

如果你稍微接触过一些运维相关的业务或者产品,就会知道 cronjob 在 devops 产品中就是定时任务。所以其实就是在 message 这个起点之前,再增加一个定时任务模块(因为一个循环式 message 输入开始的),所以就加一个模块定时的输送 message 内容让循环开始执行。

不过需要注意的是,这种定时任务都是在后台执行的,这也是为什么要先介绍上一张,再介绍这一张的原因。

手动触发定时触发
触发者用户输入调度线程
触发时机随时cron 表达式指定
需要人参与否(调度器自动入队,空闲时自动交付)
持久性durable 跨重启

工作原理

cron 调度器的四层分工比较复杂,我这里简单做一下介绍:

层级功能说明
Scheduler(调度线程)每秒检查时间时间到了,把对应任务放到 cron_queue
Queue(队列)存放待执行任务调度线程把触发任务丢这里,等待 Agent 空闲执行
Queue Processor(交付端)检查队列 & Agent 状态Agent 空闲就拉取队列任务开始执行
Consumer(Agent loop)真正执行任务把任务注入到 Agent 的 messages 里,让 Agent 做事

简单来说,调度线程就是闹钟响了该去干活了;队列就是干这个活的人很多,得排队等着轮到你来干;交付端就是包工头不忙了,开始让刚才排队的开始干活了;Agent loop 就是我们的循环才是真的开始执行任务。

他把整个过程拆分成了 4 个部分来做,就是为了安全——把一个重要的事情分三个三个人来做,互相之间都有部分权利,但不会一个人拿着全部的权利,不至于一崩到底。

Cron Scheduler — 按时间表生产工作