Threaded Mode 下定时任务配置教程
之前写了两篇关于 Openclaw 任务隔离的文章,自己在配置定时任务时遇到一些问题。详细研究了一下,把过程记录下来。
问题来源
在 Threaded Mode(话题模式)下配置定时任务,默认会发到”新聊天”(All)那个总对话框里,而不是当前子话题。
比如你在”博客”话题里想配置一个每天提醒写博客的定时任务,结果消息每次都跑到”新聊天”去了。这就是问题所在。
这篇文章的目的就是解决它——让定时任务能发送到正确的独立话题下面。
最简单的方式:让 Openclaw 帮你配置
不需要 SSH 到服务器,不需要改配置文件。直接在 Telegram 对话框里发给 Openclaw 就行。
发给 Openclaw 的话术:
我需要在 Threaded Mode(话题模式)下配置定时任务,但遇到沙箱权限受限的问题。
请帮我做以下配置:
1. 修改 ~/.openclaw/openclaw.json,在沙箱配置中: - 从 deny 列表移除 cron,确保 allow 列表包含 cron - 将 sandbox.mode 设为 "all",sandbox.scope 设为 "session"
2. 在 cron 配置中: - 确保 enabled 为 true - 设置 maxConcurrentRuns 和 sessionRetention
3. 配置完成后执行 openclaw gateway restart
完成后,在当前话题创建一个测试定时任务,验证是否配置成功。Openclaw 会自动帮你完成:查询 Thread ID、配置权限、创建定时任务。
常用话术模板
完整流程(获取 Thread ID + 设置任务)
你是 Telegram 设置的 Threaded Mode 下的一个子话题。1. 请先告诉我这个话题的 Thread ID 是多少2. 然后帮我设置一个每小时执行一次的定时任务3. 任务内容:查询当前天气情况并发送到群聊4. 每次汇报都在这个 Thread ID 下面进行每小时汇报
我需要在当前话题配置一个每小时执行一次的定时任务。任务内容:查询当前天气情况并发送到群聊请帮我:1. 获取当前话题的 Thread ID2. 配置定时任务,每次在这个 Thread ID 下执行每日汇报
配置一个每天早上6点的定时任务。任务内容:查询明天天气情况请获取当前话题的 Thread ID 并设置任务提醒任务
创建一个每天晚上8点的提醒任务。任务内容:提醒我喝水在当前话题执行,并告诉我这个话题的 Thread ID一般来说,上面的自动配置步骤会自动进行,Openclaw 会帮你完成配置。但如果有人想尝试手动配置,或者想了解在 JSON 文件中是如何修改的,可以参考以下步骤(当然,还是推荐使用上面的自动配置步骤):
手动配置步骤
1. 权限配置
找到 ~/.openclaw/openclaw.json,添加或修改以下内容:
{ "agents": { "defaults": { "sandbox": { "mode": "all", "scope": "session", "deny": ["browser", "canvas", "nodes", "discord", "gateway"], "allow": ["cron", "exec", "bash", "process", "read", "write", "edit", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn"] } } }, "cron": { "enabled": true, "maxConcurrentRuns": 2, "sessionRetention": "24h" }}改完配置后,重启 Gateway:
openclaw gateway restart2. 查询话题 Thread ID
在目标话题发一条消息,然后运行:
cat ~/.openclaw/agents/main/sessions/sessions.json | python3 -c "import json, sysdata = json.load(sys.stdin)for key, val in data.items(): if 'thread' in key: origin = val.get('origin', {}) thread = origin.get('threadId') print(f'Thread ID: {thread}')"3. 创建定时任务
关键是把 Thread ID 加到 —to 参数里:
openclaw cron add \ --cron "Cron表达式" \ --tz "Asia/Shanghai" \ --message "任务内容" \ --channel telegram \ --to "telegram:用户ID:ThreadID" \ --name "任务名称" \ --session isolated到 Thread 1114:
openclaw cron add --cron "0 * * * *" --tz "Asia/Shanghai" --message "查询当前天气情况" --channel telegram --to "telegram:7121476065:1114" --name "天气整点汇报" --session isolated每天晚上8点到 Thread 1079:
openclaw cron add --cron "0 20 * * *" --tz "Asia/Shanghai" --message "提醒我喝水" --channel telegram --to "telegram:7121476065:1079" --name "喝水提醒" --session isolated4. 管理任务
openclaw cron listopenclaw cron rm <任务ID>5. 验证
tail -20 /tmp/openclaw/openclaw-*.log | grep "thread:1114"出现 lane=session:agent:main:main:thread:1114 就表示成功。
Thanks for reading!