OpenClaw内置Cron的实现原理

时间:2026-03-10 关注公众号 来源:网络

OpenClaw,一款深邃而强大的自动化神器,它在容器的浩瀚宇宙中自如航行,以其内置的Cron引擎为舵,引领定时任务精准触达每一个预定时刻。在这数字海洋中,OpenClaw不仅是守护者,更是一位智者,利用其独特的调度智慧,于进程之心植下时间的种子,让任务如星辰般按轨运行。通过Docker的双翼,无论是Compose的编排还是Dockerrun的直驱,OpenClaw都能灵活定位,其生命之源——`jobs.json`,隐于`.openclaw/cron`的秘境之中,连接着数据的脉络,静待指令的激活。

探索者们,通过`docker ps`的慧眼,识别出OpenClaw容器的光辉轨迹,再借助`docker inspect`的探秘之力,解锁挂载之谜,揭示那决定性的配置路径。在这个世界,每一条命令都是通往效率的桥梁,每一行数据都是时间的艺术。OpenClaw,邀您共赴一场时间与技术的盛宴,让定时任务不再是挑战,而是化繁为简,随心所欲的艺术创作。在OpenClaw的引领下,您的自动化流程将如行云流水,尽显科技之美。

  目录定时任务配置1)看容器是怎么起的(compose还是dockerrun)2)找到openclaw容器名后,导出完整启动/挂载信息jobs.json配置说明调度计划schedule配置方式   

OpenClaw的“定时任务(内置Cron)”本质上就是:在进程内维护一个Cron表达式调度器,周期性计算“下一次触发时间”,到点后把任务投递到执行器(线程池/协程/队列)里跑。   

  

  

定时任务配置   

OpenClaw自带一个Cron调度系统,数据存储在.openclaw/cron目录中。   

  

例如:路径/root/openclaw-docker/data/.openclaw/cron/jobs.json通常由“OpenClaw的数据目录(datadir)+固定子目录.openclaw/cron/+固定文件名jobs.json”共同决定。   

  

也就是说,真正可配置的一般只有前半段:/root/openclaw-docker/data(数据卷/工作目录),后半段多半是程序写死的相对路径。   

  

判断这个jobs.json路径由哪里决定   

  

  

1)看容器是怎么起的(compose还是dockerrun)   dockerps--format'table{{.Names}}\t{{.Image}}\t{{.Command}}\t{{.Mounts}}'   

  

2)找到openclaw容器名后,导出完整启动/挂载信息   

把openclaw-docker-openclaw-gateway-1换成你的容器名,dockerinspect里Binds/Mounts字段进行判断   

  dockerinspectopenclaw-docker-openclaw-gateway-1--format'Name={{.Name}}Cmd={{json.Config.Cmd}}Entrypoint={{json.Config.Entrypoint}}Env={{json.Config.Env}}Binds={{json.hostConfig.Binds}}Mounts={{json.Mounts}}'   

比如输出:   

  Binds=["/root/openclaw-docker/data/.openclaw:/home/node/.openclaw:rw",...]Mounts=[{"Type":"bind","Source":"/root/openclaw-docker/data/.openclaw","Destination":"/home/node/.openclaw",...}]这表示:宿主机/root/openclaw-docker/data/.openclaw   
被bindmount到容器内/home/node/.openclaw   

OpenClaw的Cron数据文件放在.openclaw/cron/jobs.json这个相对路径下,所以:   

容器内路径:/home/node/.openclaw/cron/jobs.json宿主机对应路径:/root/openclaw-docker/data/.openclaw/cron/jobs.json   

另外需要注意Env的配置,如:   

  Env=["HTTP_PROXY=","TERM=xterm-256color","NODE_OPTIONS=--use-env-proxy","NO_PROXY=localhost,127.0.0.1,172.17.0.0/16,10.0.0.0/8","HOME=/home/node"   

Env里还有HOME=/home/node,很多程序默认把数据放在$HOME/.openclaw,这也进一步印证容器内会用/home/node/.openclaw   

  

  

jobs.json配置说明   {"version":1,"jobs":[{"id":"UUID-EXAMPLE-0001","agentId":"main","name":"定时执行脚本任务(示例)","enabled":true,"createdAtMs":1700000000000,"updatedAtMs":1700003600000,"schedule":{"kind":"every","everyMs":43200000},"sessionTarget":"isolated","wakeMode":"next-heartbeat","payload":{"kind":"agentTurn","message":"执行bash/home/node//task.sh\"\"2"},"state":{"nextRunAtMs":1700043200000,"lastRunAtMs":1700003600000,"lastStatus":"ok","lastDurationMs":16204}}]}   

顶层   

version:文件格式版本(用于兼容/升级迁移)。jobs:定时任务数组。   

job基本信息   

id:任务唯一标识(UUID)agentId:由哪个agent执行(如main)。name:任务展示名。enabled:是否启用;false表示不调度。时间戳(毫秒)createdAtMs/updatedAtMs:创建/更新的epoch毫秒时间。   

  

调度计划schedulekind:"every":按固定间隔触发(不是cron表达式)。everyMs:间隔毫秒数;43200000=12小时。   

三种调度类型   
类型说明示例   
at一次性定时“30分钟后提醒我”   
every固定间隔重复“每5分钟检查一次”   
cron标准Cron表达式09**1-5(工作日每天9点)   

  

示例(cron调度)   

  "schedule":{"kind":"cron","expr":"5593**","tz":"Asia/Shanghai"}   

字段说明   

kind:"cron":使用cron表达式触发expr:"5593**":cron表达式(常见5段:分时日月周)tz:"Asia/Shanghai":按这个时区解释cron时间(避免容器时区/UTC造成偏差)   

会话与唤醒   

sessionTarget:"isolated":每次运行用隔离会话(避免污染主对话/上下文)。wakeMode:"next-heartbeat":到点后在“下一次心跳/调度tick”执行,可能有轻微延迟。   

执行模式:   
MainSession:把任务当作"用户消息"注入主对话,像你手动发消息一样触发Agent   
IsolatedSession:启动独立会话执行复杂任务(联网搜索、生成报告等),完成后把结果汇报回主会话   

  

执行内容payload   

kind:"agentTurn":把一条“消息回合”投递给agent来执行。message:给agent的指令文本(这里示例为执行bash脚本带参数)。   

~payload.kind如果是systemEvent,只是在OpenClaw界面里显示一条系统消息   

  

运行状态state(运行后写回)   

nextRunAtMs:下次触发时间(ms)。lastRunAtMs:上次触发时间(ms)。lastStatus:上次状态(示例ok)。lastDurationMs:上次耗时(ms)。   

  

配置方式   

你在OpenClaw对话中直接用自然语言说就行,   
OpenClaw会自动创建cron任务,任务数据持久化到/home/node/.openclaw/cron目录。   

  

到此这篇关于OpenClaw内置Cron的实现原理的文章就介绍到这了,更多相关OpenClaw内置Cron内容请搜索多特以前的文章或继续浏览下面的相关文章,希望大家以后多多支持多特!   

阅读全文
扫码关注“ 多特资源库
更多更全的软件资源下载
文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站)
玩家热搜

相关攻略

正在加载中
版权
版权说明

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站)

电话:13918309914

QQ:1967830372

邮箱:[email protected]

toast