OpenClaw 定时任务踩坑指南:model null、时区错误、消息截断三大坑

用 OpenClaw 搭建了一套自动化定时任务系统(竞品监控、舆情日报、每日记忆生成等),运行了一个月,踩了三个大坑,分享给同样在用 OpenClaw 的朋友。

坑一:model null 导致 isolated session 全部失败

症状

cron 任务突然全部报错:

cron payload.model 'null' rejected by agents.defaults.models allowlist: minimax-cn/null

原因

创建 cron 任务时没有显式指定 model 字段。主 session 有默认模型回退,但 isolated session 不支持。一旦默认模型链变化,null 就会被模型白名单拒绝。

修复

在每个 cron 任务的 payload 里显式指定 model:

"payload": {
  "kind": "agentTurn",
  "message": "...",
  "model": "minimax-cn/MiniMax-M2.7"
}

教训:isolated session 的 model 不能依赖默认值,必须显式写死。

坑二:Python date.today() 用的是 UTC,不是本地时间

症状

凌晨跑的定时任务,提取的今日消息少了几个小时。

原因

Python 的 date.today() 返回的是 UTC 日期,不是北京时间。凌晨0-8点(UTC 16:00-00:00),UTC 和北京差一天。

修复

# 错误
from datetime import date
today = date.today().strftime('%Y-%m-%d')  # UTC日期

# 正确
from datetime import datetime, timezone, timedelta
SHANGHAI = timezone(timedelta(hours=8))
today = datetime.now(SHANGHAI).strftime('%Y-%m-%d')  # 北京时间

bash 命令同理:

# 错误
date +%Y-%m-%d

# 正确
TZ='Asia/Shanghai' date +%Y-%m-%d

坑三:消息列表被 [:80] 截断,一天只记录了前80条

症状

每日记忆生成任务跑完,日志只记录到晚上8点,之后的消息全丢了。

原因

Python 脚本里有 messages[:80] 限制。当时写的时候消息少没问题,但一天下来有 400+ 条消息,80 条只够覆盖到晚上8点。

修复

# 错误
print('\n'.join(messages[:80]))

# 正确
print('\n'.join(messages))  # 输出全部消息

教训:硬编码的限制要根据实际数据量调整,不要想当然。

总结

根因修复
model nullisolated session 不回退默认模型显式指定 model
时区错误Python date.today() 用 UTC用 datetime.now(SHANGHAI)
消息截断[:80] 硬编码限制去掉限制或调大

这三个坑都是写的时候没问题,跑着跑着就炸了的类型。定时任务的代码一定要考虑边界情况:时区、数据量、默认值。希望对大家有帮助。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注