跳到主要内容

WorkBuddy 定时任务执行机制

适用范围:WorkBuddy 桌面客户端与 Web 端创建的定时任务(Automation)。

内容涵盖:任务创建、调度触发、执行环境、沙箱生命周期、数据存储、资源隔离。

更新日期:2026-10-22


1. 概述​

定时任务按创建来源分为三类,机制差异显著:

来源执行位置依赖本机在线可访问本地文件
本地本机客户端是是
项目云端沙箱(随项目)否否
云端腾讯云隔离沙箱否否

模式判定:以创建时"工作空间"字段为依据。指向本地文件夹为本地任务;由系统分配远程空间、或无该字段可选,为云端任务。

共同点:项目任务与云端任务均运行在云端沙箱,可归入「云端模式」;本地与云端两种模式的 AI 推理均在云端完成,区别在于脚本执行与文件读写的发生位置。


2. 能力对比​

维度本地任务云端任务
配置存放本地 SQLite + JSON 快照云端配置库
触发机制客户端内轮询调度器平台统一调度中心
需开机 / 客户端在线是否
执行环境本机 sandbox-cli 进程云沙箱实例
权限配置有(默认 / 完全访问)无
可访问本地文件、内网是否
产物位置本地工作空间文件夹云端工作空间
结束后进程退出,目录与产物留存算力休眠→回收,数据持久
并发控制本机上限 3 个平台并发闸门 + 弹性扩容
推送企业微信支持不支持
离线时表现不执行,窗口期内补跑正常执行,仅可查看不可操作
适用场景本地文件批处理、未上传资料、内网资源轻量任务、跨设备、后台定时运行

3. 云端任务​

3.1 执行链路​

flowchart LR
A["创建:配置入库"] --> B["到点触发:调度中心扫描"]
B --> C["准入校验:身份·配额·并发"]
C --> D["拉起 Session"]
D --> E["分配沙箱 + 挂载云端空间"]
E --> F["执行并回写产物"]
  1. 配置入库:仅写入任务定义(名称、提示词、模型/专家/技能/连接器、执行规则、工作空间、通知渠道),不占用计算资源,未运行时成本近零。
  2. 调度触发:平台统一调度服务扫描到期规则,生成运行实例。
  3. 准入校验:沿用创建者登录身份与积分额度;校验任务启用状态、有效期、频率上限、并发余量与额度。
  4. 拉起 Session:每次运行生成独立会话,携带提示词、云端工作空间文件、项目资产、个人记忆、技能与专家配置。
  5. 分配沙箱:从预热池分配隔离沙箱,将云端工作空间挂载至沙箱文件系统。
  6. 执行与回写:Agent 在沙箱内规划、调用工具、执行脚本、读取文件与连接器;产物写回云端工作空间,运行记录(状态、耗时、摘要、失败原因)入库,并按配置渠道推送。

3.2 沙箱生命周期​

stateDiagram-v2
[*] --> 运行中
运行中 --> 闲置休眠: 约 10 分钟无访问
闲置休眠 --> 运行中: 唤醒(≤300ms)
闲置休眠 --> 回收释放: 超时回收
回收释放 --> 运行中: 再次访问时重建
回收释放 --> [*]
状态资源状态数据状态
运行中独占 CPU 与内存配额产物实时写入持久层
闲置休眠算力冻结或换出,不计费;进程状态保留持久层不变
回收释放实例、内存、临时盘归还资源池持久层不变

关键区分:休眠为暂停与恢复,同一实例,官方指标"唤醒 P95 ≤ 300ms"适用于此阶段;回收后原实例已不存在,再次访问为重建(预热池实例 + 预制镜像 + 快照 CoW),速度同样较快但机制不同。

重建仍快的原因:

  • 会话记录、产物、工作空间均在持久层,与沙箱实例解耦,读取不依赖沙箱
  • 沙箱从预制镜像启动,运行时与依赖已内置,无需现场安装
  • CoW 写时复制,仅叠加可写增量层,不复制整个文件系统
  • 预热池提供已启动实例,免去冷启动

3.3 隔离与并发​

资源分配规则为 1 Session : 1 沙箱,每次运行独占一个沙箱实例与相应配额。

  • 共享:底层物理集群(多租户池化)
  • 隔离:文件系统挂载、进程空间、网络、凭证授权
  • 效果:单个任务异常不波及其他任务

平台级瓶颈位于调度层,整点集中触发时通过并发闸门、弹性扩容与排队消化。

3.4 资源与限制​

平台侧容量池化,按需横向扩展。公开指标:

  • 实例销毁不丢数据(存算分离)
  • 秒级 CoW Fork,长任务中断可原地续跑
  • 休眠唤醒 P95 ≤ 300ms,闲置不计费
  • 单集群百万级 Session,创建速度 ≥ 1 万/秒
  • 算力规模从十几至数万节点平滑扩展

单任务侧存在资源配额上限(具体数值未公开)。超限行为:进程被终止,该次运行失败并在运行记录中标注原因,不影响其他任务,下次运行仍从干净沙箱启动。超过最大执行时长同样判定失败。

3.5 约束条件​

  • 编辑时不可选择工作空间与权限
  • 不支持推送至企业微信
  • 无法访问本机文件、内网、未上传的本地资料
  • 提示词中包含本地路径将导致该步骤空跑
  • 删除任务后,已产生的云端会话及其产物仍保留
  • 手动删除 Session 将永久清除对话记录与文件
  • 离线状态仅可查看,不可操作

4. 本地任务​

4.1 调度机制​

组件为 LocalAutomationScheduler,运行于客户端主进程。启动日志参数:

[LocalAutomationScheduler] started tickMs=30000 activeTickMs=5000 missedWindowMs=86400000 concurrency=3
参数值含义
tickMs30000空闲状态轮询间隔(毫秒)
activeTickMs5000有活跃任务时的轮询间隔
missedWindowMs86400000错过后的补跑窗口(24 小时)
concurrency3本机并发执行上限
flowchart TD
A["tick(30s / 5s)"] --> B{"存在 ACTIVE、未软删除<br/>且 next_run_at <= now 的任务"}
B -- 否 --> A
B -- 是 --> C{"running = 1"}
C -- 是 --> D["跳过,等待下次 tick"]
C -- 否 --> E{"jitter 抖动结束"}
E -- 否 --> D
E -- 是 --> F["dispatch:创建会话并拉起 sandbox-cli"]
F --> G["run start"]
G --> H["Agent 循环执行"]
H --> I["run finished:success / failure"]
I --> J["写入 automation_runs<br/>running 置 0<br/>按 RRULE 计算下一 next_run_at"]
J --> A
D --> A

调度特性:

特性说明
物化时间next_run_at 为预计算时间戳,查询仅需索引扫描 next_run_at <= now,不实时解析 cron
抖动(jitter)实际启动时间含随机延迟,实测 100830 / 206975 / 516426 ms(约 1.7~8.6 分钟),用于规避整点集中触发
休眠暂停系统休眠或锁屏触发 scheduling suspended,恢复后 scheduling resumed;窗口期内补跑,超期判定错过
启动对账客户端启动时回收标记为运行中但已中断的记录(reconciled N/N in-progress automation run records),避免 running 长期卡死
时区RRULE 的 BYHOUR 按本地时区解释,入库 next_run_at 为 epoch 毫秒

4.2 执行进程模型​

sequenceDiagram
participant S as LocalAutomationScheduler
participant C as 客户端
participant B as sandbox-cli(本机)
participant M as 云端模型
S->>C: dispatch,以 cwds 为工作目录创建会话
C->>B: 启动沙箱进程
C->>M: 提示词 + 工作空间文件片段
M->>C: 工具调用(读取文件 / 执行命令)
C->>B: 在授权目录内执行
B->>C: 执行结果
C->>M: 回传结果
Note over C,M: 循环直至任务完成
C->>C: 写入产物与运行记录

沙箱进程路径:

/Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked/cli/vendor/sandbox/<version>/sandbox-cli

每会话一个沙箱进程,落盘目录 ~/.workbuddy/workspace/sessions/<session_id>/,包含:

子目录 / 文件内容
fs/会话文件系统视图
snapfile/快照
permission.json本会话权限策略
modify_backup/改动前备份

权限判定逐次执行,依据 permission.json;permission_mode=fullAccess 时全部放行。

4.3 数据存储​

存储分三层:配置与状态存 SQLite,产物存普通文件夹,过程存日志。

数据类别位置形态
任务定义~/.workbuddy/workbuddy.db → automationsSQLite
运行记录同库 → automation_runsSQLite
防重入状态同库 → automation_runtime_stateSQLite
推送队列同库 → automation_delivery_outboxSQLite
任务快照~/.workbuddy/automation-backups/automation-*.jsonJSON
产物cwds 指向的本地文件夹普通文件
会话沙箱痕迹~/.workbuddy/workspace/sessions/<session_id>/目录
调度日志~/.workbuddy/logs/automation.log文本
沙箱日志~/.workbuddy/logs/sandbox/<date>/sandbox_<pid>_000.log文本

主库为 WAL 模式(伴随 -wal / -shm)。产物为普通文件,可脱离 WorkBuddy 直接访问,支持版本管理与外部同步。

4.4 数据库表结构​

automations —— 任务定义

id, name, prompt, status, schedule_type,
next_run_at, last_run_at, -- next_run_at 为预计算触发时间(epoch ms)
cwds, -- JSON 数组,本地工作目录
rrule, scheduled_at, valid_from, valid_until,
model_id, model_is_thinking, skills_json,
push_to_wechat, push_to_wecom_bot, wecom_bot_source,
owner_user_id, owner_status, owner_source,
expert_id, expert_marketplace, connector_ids_json,
permission_mode, created_at, updated_at, deleted_at

增量字段:workspace_scope、context_window、reasoning_effort、wecom_bot_chat_id。deleted_at 表示软删除,记录保留但不再参与调度。

automation_runs —— 单次运行

thread_id(主键), automation_id, status, read_at, thread_title,
source_cwd, runs_json, result_success, metadata_json,
failure_code, reason_code, created_at, updated_at

automation_runtime_state —— 防重入

automation_id(主键), last_run_at, last_error,
running, running_started_at, running_conversation_id, metadata_json

running 用于防止同一任务并发执行。

automation_delivery_outbox —— 推送投递(事务性发件箱)

dedupe_key(唯一), channel, automation_id, run_id, payload_json,
status, attempt_count, max_attempts(默认 5),
next_run_at, lease_owner, lease_expire_at,
last_error_code, last_error_message, delivery_id

推送失败不影响任务执行,由该表带租约重试,上限 5 次。

4.5 生命周期与清理​

任务结束后:执行进程退出,不常驻;产物与运行记录留存;会话沙箱目录保留(用于回溯会话、回滚改动),由用户手动清理。

本地任务不存在池化回收机制,无"归还资源池"过程。清理行为仅有两类:

清理对象触发方式
会话沙箱目录用户删除会话或手动清理
自动备份备份空间达上限后按时间顺序清理最早快照

异常挂起:默认权限下遇到需确认的操作,无人响应时任务停留在等待确认状态,不自动终止、不消耗资源。


5. 关键差异对照​

问题本地任务云端任务
执行环境位置本机 sandbox-cli 进程云弹性算力池中的隔离沙箱
结束后是否销毁进程退出;会话目录与产物留存算力休眠后回收;数据在持久层不丢
二次访问是否快速是,会话目录在本地磁盘是,预热实例 + 镜像 + CoW 快照重建
是否共享执行环境否,进程级隔离,本机上限 3 并发否,1 Session : 1 沙箱,仅共享物理集群
资源不足表现占用本机内存,影响本机性能单沙箱配额超限即失败,不影响其他任务
数据存放SQLite 四表 + 本地文件夹云端持久层 + 云端工作空间
本机离线影响不执行,24 小时窗口内补跑无影响

6. 资料可信度说明​

级别范围
A:产品文档明示三种任务来源、配置项定义、云端沙箱隔离与免开机、"任务频率 / 最大执行时长 / 系统并发"限制、云端任务不支持企业微信推送且无法访问本地文件、任务删除后云端会话保留、Session 闲置 10 分钟休眠与唤醒、删除 Session 永久清除、1 Session : 1 沙箱、存算分离、秒级 CoW Fork、中断续跑、闲置不计费、百万级并发与预热池
B:本机实测(2026-10-21)数据库文件位置与四表字段、调度器四项参数、jitter 实测值、sandbox-cli 路径、会话沙箱目录结构、JSON 快照字段、日志格式
C:机制推断单沙箱内存配额数值、回收超时阈值、镜像与快照的实现细节、云端调度扫描间隔

C 级内容用于解释行为,不作为规格参数引用。

参考文档

  • 定时任务:https://www.workbuddy.cn/docs/workbuddy/From-Beginner-to-Expert-Guide/Function-Description/Automation-Guide
  • 项目管理(本地/云端任务对比、项目存储 5GB):https://cloud.tencent.cn/document/product/1759/138797
  • WorkBuddy Managed Agents(运行底座):https://www.workbuddy.cn/docs/enterprise/216050766183768064