
用 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 null | isolated session 不回退默认模型 | 显式指定 model |
| 时区错误 | Python date.today() 用 UTC | 用 datetime.now(SHANGHAI) |
| 消息截断 | [:80] 硬编码限制 | 去掉限制或调大 |
这三个坑都是写的时候没问题,跑着跑着就炸了的类型。定时任务的代码一定要考虑边界情况:时区、数据量、默认值。希望对大家有帮助。