调度系统¶
myopenclaw 的定时任务分布在两层:宿主机 launchd(健康采集/心跳)和 Docker 容器内调度器(备份、Agent 工作流、语雀/研发数据)。本页是 myopenclaw 管理的定时任务的 single source of truth(个人 cron 不在此列)。dailyinfo 的 8 个每日任务已迁到 dailyinfo 自己的 compose 栈,见 dailyinfo 调度。
总览¶
按执行时间排序的完整日程表:
| 时间 | 层级 | 调度器 | 任务 | 安装方式 |
|---|---|---|---|---|
| 每 60s | 宿主机 | launchd | Healthchecks.io 心跳 ping | install-healthchecks-ping.sh |
| 06:00 | Docker | yuque-mcp 调度器 | 语雀知识库快照(变更基线) | 容器内置(YUQUE_CHANGE_SNAPSHOT_TIME) |
| 07:00 | Docker | yuque-mcp 调度器 | 语雀变更报告生成(yuque-daily-digest 的数据源) | 容器内置(YUQUE_CHANGE_REPORT_TIME) |
| 07:20 | Docker | Hermes cron(道元 profile) | 论文清单对账(已入库 Zotero 的条目自动撤销;PAPER_QUEUE_MCP_URL 非空门控,--no-agent 不经过 LLM;无命中静默) |
start.sh 幂等注册(paper-queue-sync) |
| 07:30 | Docker | Hermes cron | 工作日晨间简报(事务 + 邮件,周一至周六) | start.sh 自动注册 |
| 07:30 | Docker | Hermes cron(道元 profile) | dailyinfo 全量简报镜像(5 类正文 → 道元飞书私聊;DAOYUAN_FEISHU_DM_CHAT_ID 门控,--no-agent 不经过 LLM) |
start.sh 幂等注册(dailyinfo-digest) |
| 07:45 | Docker | repo-scanner-mcp 调度器 | git-contribution-stats 每日全量采集(容器内 daily sync,唯一写者) | 容器内置(服务强制 REPO_SCANNER_WATCH_OWNS_ISSUES=1) |
| 07:45 | 宿主机 | launchd | AgentOps 健康信号采集 | install-all-schedulers.sh |
| 07:50 | Docker | Hermes cron | Daily Command Center(TDAI 记忆 + 健康 + 场景) | start.sh 自动注册 |
| 07:55 | Docker | Hermes cron | daily-dev-report(研发贡献日报) | start.sh 自动注册 |
| 08:10 | Docker | Hermes cron | yuque-daily-digest(语雀知识库变更日报,需配置 YUQUE_DAILY_PUSH_REPOS + YUQUE_MCP_URL + MCP_YUQUE_MCP_API_KEY) |
start.sh 自动注册 |
| 08:30 | Docker | Hermes cron(爱玛士 / 爱码士) | 服务器日报(server-monitoring 摘要;爱玛士 → 飞书私聊,爱码士 → 预报系统群;SERVER_MONITORING_MCP_URL + MONITORING_DIGEST_GROUP_CHAT_ID 门控。⚠️ 域名入口在校园网可达时无需 UniVPN;回退内网直连才需要,部署到内网服务器后无此约束) |
start.sh 幂等注册(server-monitoring-digest) |
| 每天 02:00 | Docker | crond (backup-cron) | 快照备份到云盘(清理过期快照仅在此执行) | entrypoint 自动 |
时序依赖¶
07:20 ──────── paper-queue-sync ← paper-queue MCP + Zotero MCP(已入库条目自动撤销)
07:30 工作日晨间简报(周一至周六)— 事务 + 邮件汇总
07:30 ──────── dailyinfo-digest ← dailyinfo MCP(5 类全量正文 → 道元飞书私聊)
07:45 ──────── repo-scanner-mcp daily sync(容器内)+ AgentOps 采集(宿主)← 并行
07:50 ──────── Daily Command Center ← 读 inbox.md + TDAI 记忆
07:55 ──────── daily-dev-report ← 读 repo-scanner MCP (SQLite)
08:10 ──────── yuque-daily-digest ← 读本机 yuque-mcp 容器(07:00 已生成变更报告)
08:30 ──────── 服务器日报(Hermes 两条 cron:爱玛士私聊 / 爱码士预报系统群)
← 读团队 server-monitoring MCP(校园域名入口或内网直连可达)
四个早间推送在 07:30–08:10 窗口内完成(含语雀日报 08:10),数据采集在推送前完成,保证数据新鲜。08:30 的服务器日报由 Hermes 自己的 cron 触发(爱玛士默认 profile + 爱码士 coder profile 各一条),不依赖宿主机 launchd;天一(OpenClaw)保留按需查询、不再主动推送。
AgentOps 数据流:collect-agentops (launchd) → inbox.md → Daily Command Center (morning-triage-v2)。系统健康信号由宿主机采集脚本确定性生成,Hermes skill 直接读取结构化文件,不再依赖 TDAI 记忆搜索。
一键安装¶
等价于手动执行:
./scripts/launchd/install-healthchecks-ping.sh # Healthchecks.io 心跳
./scripts/launchd/install-collect-agentops.sh # AgentOps 健康采集
Git 数据采集的宿主 launchd 任务已于 2026-11-03 退役:它与容器
repo-scanner-mcp的 07:45 daily sync 双写同一 SQLite(跨 virtiofs),会损坏数据库 (database disk image is malformed)。每日全量采集现在只由容器负责。
Docker 容器内的定时任务(Hermes cron 默认 profile / coder / daoyuan + backup)由 ./scripts/start.sh 和容器 entrypoint 自动注册,无需手动操作;yuque-mcp 容器的快照/报告调度为镜像内置(服务端启动即生效,无注册步骤)。其中 yuque-daily-digest 需在 .env 同时配置 YUQUE_DAILY_PUSH_REPOS、YUQUE_MCP_URL、MCP_YUQUE_MCP_API_KEY 三者后才会注册(缺任一项静默跳过,只留一行提示);dailyinfo-digest 需要 DAOYUAN_FEISHU_DM_CHAT_ID + DAILYINFO_MCP_URL + DAILYINFO_MCP_KEY;paper-queue-sync 需要 DAOYUAN_FEISHU_DM_CHAT_ID + PAPER_QUEUE_MCP_URL(URL 显式留空 = 停用,start.sh 会同时移除既有 job)。
backup-cron 的保留策略(删除超过
BACKUP_KEEP_DAYS的快照)只在 02:00 这个定时任务里执行;容器启动时的初始备份带BACKUP_SKIP_PRUNE=1,重启不会删任何快照。详见 备份系统。
验证¶
# 1. 检查所有 launchd 任务
launchctl list | grep -E 'ai\.(myopenclaw|git-contribution-stats)'
# 预期输出(launchctl 输出是三列 PID/退出码/Label,第 2 列是上次退出码,
# 0 或 1 均为正常):
# - 0 ai.myopenclaw.collect-agentops
# - 0 ai.myopenclaw.healthchecks-ping
# ⚠️ 直接 grep 'ai\.' 会带出 ai.hermes.gateway
#(宿主机上的 Hermes 网关常驻服务,不由本仓安装,不是定时任务)。
# ai.git-contribution-stats.collect 已于 2026-11-03 退役,不应再出现。
# 2. 检查 backup-cron
docker compose exec backup-cron crontab -l
# 3. 检查 Hermes cron(默认 profile / coder / daoyuan)
docker compose exec hermes /opt/hermes/.venv/bin/hermes cron list
docker compose exec hermes-daoyuan /opt/hermes/.venv/bin/hermes -p daoyuan cron list
新机器检查清单¶
换台机器拉起服务后,逐项确认:
- [ ]
./scripts/launchd/install-all-schedulers.sh已执行,无报错 - [ ]
launchctl list | grep ai.输出包含全部已安装任务 - [ ]
docker compose ps所有服务 Up - [ ]
docker compose exec hermes /opt/hermes/.venv/bin/hermes cron list包含 "Daily Command Center" - [ ] 若
.env里YUQUE_DAILY_PUSH_REPOS+YUQUE_MCP_URL+MCP_YUQUE_MCP_API_KEY三者都已配置,cron list 还应包含 "yuque-daily-digest" - [ ] 若
.env里DAOYUAN_FEISHU_DM_CHAT_ID+DAILYINFO_MCP_URL+DAILYINFO_MCP_KEY已配置,hermes -p daoyuan cron list应包含 "dailyinfo-digest"(no-agent) - [ ] 若
.env里DAOYUAN_FEISHU_DM_CHAT_ID+PAPER_QUEUE_MCP_URL已配置,hermes -p daoyuan cron list应包含 "paper-queue-sync"(no-agent) - [ ] Healthchecks.io Dashboard 显示 "Last Ping: just now"(等 60s 后刷新)
- [ ] 次日 07:50–08:10 检查飞书是否收到晨间四签推送(含 08:10 语雀日报)
卸载¶
故障排查¶
某些 launchd 任务未运行¶
# 查看上次运行日志
tail -50 logs/collect-agentops.log
tail -50 logs/healthchecks-ping.log
# 手动触发
launchctl start ai.myopenclaw.collect-agentops
morning-triage 未触发¶
# 查看 Hermes cron 列表
docker compose exec hermes /opt/hermes/.venv/bin/hermes cron list
# 查看 agent 日志
docker compose exec hermes tail -100 /opt/data/logs/agent.log | grep "Daily Command"
dailyinfo 推送未收到¶
参见 dailyinfo 调度 的故障排查部分。
macOS 特定¶
所有 launchd 任务依赖 macOS launchd。Linux 上的替代方案:
| launchd | Linux 等价物 |
|---|---|
~/Library/LaunchAgents/*.plist |
systemd user timer (~/.config/systemd/user/) |
launchctl load -w |
systemctl --user enable --now |
systemd 等价物尚未提供(详见 可移植性)。