核心用法
Task Scheduler 是一款专为 OpenClaw 设计的任务队列管理组件,基于 Bytebot Task System 构建,提供完整的后台任务生命周期管理。用户可通过 Python API 或 CLI 工具创建、调度和监控任务,支持四种优先级(LOW/MEDIUM/HIGH/URGENT)和三种任务类型(立即执行、定时调度、周期性任务)。
CLI 入口为 python3 scripts/main.py,核心命令包括:create 创建任务(支持 --schedule 定时参数)、list 查看任务列表、get 获取详情、cancel 取消任务、retry 重试失败任务,以及 daemon 启动调度器服务(带 --ws-port 启用 WebSocket 实时推送)。Python API 层面,用户初始化 TaskScheduler 实例后,可调用 create_task() 或 schedule_task() 创建任务,并通过装饰器 @scheduler.on_status_change 监听状态变更。
显著优点
该组件采用纯 asyncio 异步架构,具备高并发处理能力(可配置 --concurrency 工作进程数)。任务状态机设计清晰(CREATED→PENDING→RUNNING→COMPLETED/FAILED/CANCELLED),支持自动重试机制(retry_attempts 和 retry_delay 可配置)。WebSocket 实时推送功能使前端或监控端能够即时获取任务状态变化,显著提升可观测性。
依赖层面极为轻量,仅依赖官方 websockets>=11.0.0 库,无已知 CVE 漏洞。持久化支持可选(SQLite 存储任务元数据),配置采用 YAML 格式,便于运维管理。代码结构遵循模块化设计(scheduler/task/queue/worker/websocket/persistence 分离),易于扩展和二次开发。
潜在缺点与局限性
根据安全报告,当前版本存在文档与代码实现不一致的问题:schedule_task 方法为占位实现,实际调用 create_task 创建立即执行任务;WebSocket 服务部分未完整实现,仅预留 _notify_event 回调机制。用户若基于文档进行 Cron 定时任务或完整 WebSocket 集成的开发,可能遭遇功能预期落差。
输入验证机制待加强:--params JSON 参数直接通过 json.loads() 解析,未做 Schema 验证,若下游任务处理器未自行过滤,存在被恶意参数利用的风险。此外,异常处理采用静默捕获(except Exception: pass),可能导致回调通知丢失,不利于生产环境调试。
适合的目标群体
本组件适合需要为 Agent 系统添加后台任务能力的开发者,尤其适用于:1)OpenClaw 技能开发者,需要将长时间运行的操作(如代码分析、文档生成)异步化;2)运维自动化场景,需要定时任务(数据备份、报告生成)和任务状态可视化;3)构建多步骤工作流链(workflow orchestration)的系统架构师。对 WebSocket 实时推送有强需求的用户需注意当前版本实现程度,建议评估后续版本路线图。
使用风险
性能风险:高并发场景下若未合理配置 concurrency 和队列长度,可能出现任务堆积。持久化启用时的 SQLite 写入可能成为瓶颈,大规模部署建议评估是否需要迁移至 PostgreSQL 等生产级数据库。
安全风险:--params 参数缺乏验证,需确保任务处理器函数对输入进行严格过滤,避免命令注入或路径遍历。WebSocket 服务若暴露至公网(默认绑定 0.0.0.0),需配合反向代理和鉴权机制,当前版本未内置身份验证。
依赖风险:虽当前依赖安全,但 websockets 库若未来版本引入破坏性变更,需及时锁定版本。代码中无动态代码加载,但任务处理器作为可调用对象传入,需确保来源可信。
运维风险:调度器 daemon 进程需 systemd/supervisor 等托管以保证高可用,当前未提供内置守护进程机制。任务重试策略需根据业务幂等性谨慎配置,避免非幂等任务重复执行导致数据不一致。