跳转至

与外部调度 / 备份集成(可选)

dailyinfo 自身不依赖任何外部 agent 框架。本文是给已经在用 myopenclaw 之类生态的用户的一份"开箱即用"说明。

如果你只想跑 dailyinfo,请直接看 CLI 参考 配置一条系统 crontab 即可,本文可以跳过。


为什么默认数据根是 ~/.myagentdata/dailyinfo/

dailyinfo 把所有持久化数据(FreshRSS DB、briefings、pushed 归档)放在用户目录下一个统一的子目录里:

~/.myagentdata/dailyinfo/

这只是一个约定的默认值,可以通过环境变量 DAILYINFO_DATA_ROOT 覆盖到任何位置。

之所以默认选这个路径,是为了让 myopenclaw 这类把整个 ~/.myagentdata/ 作为统一备份卷的 agent 生态可以零配置地接管备份。如果你不用 myopenclaw,这个路径对你而言只是一个普通目录。

验证当前生效的数据根:

uv run python -c "from scripts.paths import WORKSPACE_ROOT; print(WORKSPACE_ROOT)"

备份(如果你用 myopenclaw)

myopenclaw 的 docker-compose.yml 通常把 ~/.myagentdata/ 以只读方式挂进 backup-cron 容器:

volumes:
  - ${HOME}/.myagentdata:/.myagentdata:ro

只要 dailyinfo 的数据根保持默认值,就会自动跟着这套备份流程被快照到云盘,dailyinfo 这一侧不用做任何事

排查:

ls ~/.myagentdata/dailyinfo/                            # 数据是否存在
docker compose ps                                       # backup-cron 是否在跑(在 myopenclaw 项目目录里执行)

调度(如果你用 myopenclaw 的 hermes cron)

把下面这几条命令注册到 hermes cron(或你自己的等价机制)即可:

Cron Command Purpose
0 6 * * * dailyinfo run -p 1 Pipeline 1:RSS 论文 + AI 新闻
15 6 * * * dailyinfo run -p 2 Pipeline 2:代码趋势
30 6 * * * dailyinfo run -p 3 Pipeline 3:高校资讯
0 7 * * * dailyinfo push 推送 Discord + 归档

调度器只是"定时触发器"——它不需要理解 markdown 内容,不需要直接发 Discord。所有读取文件 + POST Discord 的逻辑都在 scripts/push_to_discord.py(纯 Python,无 AI 调用)。

幂等保证

dailyinfo rundailyinfo push 都是幂等的,可以安全地重复触发:

  • run:若某数据源今日已有非占位 briefing(briefings/pushed/ 任一目录),跳过抓取与 AI 调用,所以重试不会重复烧 token。
  • push:若今天没有待推送文件,对应频道会收到一条"暂无新简报"提示,不会重复发已归档内容。

退出码语义:0 表示本次至少处理了一份内容;非零仅代表"没东西可干"或出错。调度器建议不要把非零退出当告警,只监控脚本崩溃即可。


手动触发(排错 / 临时运行)

dailyinfo run                      # 立即跑一次所有 pipeline(幂等,可重复触发)
dailyinfo run -f all               # 强制刷新今天所有数据源
dailyinfo run -p 1 -f arxiv_cs_ai  # 强制刷新单个源
dailyinfo push                     # 立即推送今天已生成的 briefings
dailyinfo push -d 2026-04-22       # 补推指定日期的 briefings
dailyinfo status                   # 查看 briefings / pushed 的文件数

Discord 频道映射

.env 配置,push_to_discord.py 启动时读取。每个分类一个变量:

DISCORD_CHANNEL_PAPERS=...
DISCORD_CHANNEL_AI_NEWS=...
DISCORD_CHANNEL_CODE=...
DISCORD_CHANNEL_RESOURCE=...
DISCORD_CHANNEL_ARXIV=...

缺失某一个时该分类会被跳过(WARN),不影响其他分类。


Troubleshooting

FreshRSS DB 找不到

run_pipelines.py 会打印 warning 并跳过 Pipeline 1 的 RSS 部分。排查:

docker compose ps                                        # FreshRSS 容器是否在跑
ls ~/.myagentdata/dailyinfo/freshrss/data/users/         # 用户目录是否存在

如果你的 FreshRSS 用户名和 $USER 不一致,在 .env 里设置 FRESHRSS_USER

推送时没有今日文件

dailyinfo pushbriefings/{category}/ 里没有今日文件时,会向对应频道发一条"暂无新简报"提示并继续处理下一个分类,不算错误。

数据没被备份(仅 myopenclaw 用户)

  • 确认 dailyinfo 写入的是 ~/.myagentdata/dailyinfo/
    uv run python -c "from scripts.paths import WORKSPACE_ROOT; print(WORKSPACE_ROOT)"
    
  • 确认 myopenclaw 的 backup-cron 容器在跑(在 myopenclaw 项目目录执行 docker compose ps
  • 手动触发备份(在 myopenclaw 项目目录):
    docker compose exec backup-cron /scripts/backup-all-docker.sh