Cron 定时
源码版本v2026.7.20
职责
让 agent 能「到点自动跑」:定时报告、备份、简报等无需人在场。cron/ 子系统提供调度器、作业存储、执行记录、生命周期守卫、蓝图/建议目录,以及独立的 toolsets 隔离(定时任务可禁用部分工具,防止无人值守时干危险事)。网关用 60s 心跳驱动调度器。
关键文件
def run_job:2659— 执行单个作业的核心_run_job_script / _run_job_script_with_claim_heartbeat:2113-2247— 脚本型作业执行 + 租约心跳运行态与中断:352-445—get_running_job_ids/mark_running_jobs_interrupted/_consume_interrupted_flagtoolsets 解析:143-210—_resolve_cron_disabled_toolsets/_resolve_cron_enabled_toolsets(定时任务的工具隔离)线程池:501-547—_get_parallel_pool/_get_sequential_pool_CronStorePaths / _current_cron_store:106-157— 作业存储路径锁与输出目录:251-360—_jobs_lock_file/_job_output_dir_normalize_job_record:426-461— 作业记录规范化执行状态机:99-156—create_execution/mark_execution_running/finish_executionrecover_interrupted_executions:156-213— 崩溃恢复 +list_executions/latest_executioncheck_gateway_lifecycle:69-112— 防止定时脚本误操作网关生命周期blueprint_catalog— 作业蓝图目录suggestion_catalog/suggestions— cron 建议生成_start_cron_ticker:22335— 网关内 60s 心跳驱动调度
数据流
- 网关启动
_start_cron_ticker:22335,每 60s 触发调度器。 - 调度器读作业存储(
cron/jobs.py:106),按 cron 表达式选出到期作业。 - 每个到期作业:
- 经
check_gateway_lifecycle:112扫描脚本,阻止误改网关生命周期 - 解析该作业的 toolsets(
cron/scheduler.py:210),通常禁用危险工具(见子代理的 auto-deny 同源思路) - 在
create_execution(cron/executions.py:99)记一笔执行 run_job(cron/scheduler.py:2659)实际跑:脚本型走_run_job_script:2113,会话型喂给run_conversation:588
- 经
- 执行中崩溃 → 下次
recover_interrupted_executions(cron/executions.py:156)恢复标记。 - 结果经网关投递(或 mirror 到指定平台)。
小结
Cron 子系统的重点是「无人值守的安全性」:toolsets 隔离、lifecycle_guard 防误操作、execution 状态机做崩溃恢复。调度本身由网关心跳驱动,不需要外部 cron 守护进程。