Cron 定时任务
wesgine 为每个 Cell 提供定时任务调度能力。
API 端点
GET /cells/{id}/cron 定时任务列表(含 states)
POST /cells/{id}/cron 添加定时任务
GET /cells/{id}/cron/stats 调度器统计
DELETE /cells/{id}/cron/{jobId} 删除任务
PATCH /cells/{id}/cron/{jobId} 更新任务
POST /cells/{id}/cron/{jobId}/trigger 立即触发
POST /cells/{id}/cron/{jobId}/enable 启用
POST /cells/{id}/cron/{jobId}/disable 禁用
GET /cells/{id}/cron/{jobId}/runs 运行记录
Cell Handle
cell.Cron() → CronHandle
.List(ctx)
.Add(ctx, job)
.Update(ctx, id, patch)
.Delete(ctx, id)
.Trigger(ctx, id)
.Enable(ctx, id) / .Disable(ctx, id)
.ListRuns(ctx, id)
.Stats(ctx)
Seed 声明
CellSpec.Cron 是出生声明(INV-SEED-01):
- 仅在 Cell 首次 boot 播种进
wes_cron_jobs - 此后存储是唯一权威源
- 声明不再被读取
调度格式
支持标准 Cron 表达式:
| 字段 | 范围 |
|---|---|
| 分钟 | 0-59 |
| 小时 | 0-23 |
| 日 | 1-31 |
| 月 | 1-12 |
| 星期 | 0-7 (0 和 7 都是周日) |
Actor 边界
Cron 是 Actor 边界的第四个面(INV-CRON-10):
executeJob把entry.Actor抄进JobRequest- 不查主的
Trigger= 以别人的身份跑代码 - 判据在取出 job 的那一步
详见 Cron 执行身份边界。
配额管理
受 CellQuotas.MaxCronJobs 限制:
- 配额在唯一增长点校验(INV-QUOTA-05)
- 创建时
validateSeedDeclarationCaps拒绝装不下自己的声明
反模式
| 禁止 | 正确做法 |
|---|---|
| 依赖 CellSpec.Cron 做运行时变更 | 运行时走 Cron Handle API |
| Cron job 不带 actor | 每个 job 必须绑定 actor |
| 在 Cell.Start 校验 Cron 配额 | 配额校验在 Add 唯一增长点 |