定时任务与新闻刷新

crypto-news 等 Cron 接口、密钥与校验方式。

接口

  • 新闻刷新: POST /api/cron/crypto-news(也支持 GET)。
  • 若线上配置了 CRON_SECRET_KEY,请求头必须带:
    Authorization: Bearer <与环境变量一致的密钥>。

外网定时(如 cron-job.org)

使用 POST(或 GET),在 HTTP 标头 中设置 Authorization,不要把 Bearer 写在 请求体 里。cron-job.org 默认等待 30 秒;本接口的响应预算为 24 秒。

服务器 crontab

可配合仓库内 scripts/setup-cron.sh、cron-news-update.sh、test-deployment.sh 使用。

同步

若代码中修改了 Cron 鉴权或路径,请同步更新本页与 status/changelog。

Dependencies

环境变量

  • CRON_SECRET_KEY — /api/cron/* 的 Bearer 密钥。
  • DATABASE_URL — Cron 写入数据库。
  • ADMIN_SECRET_KEY — 可选;部分维护接口接受 ADMIN_SECRET_KEY 或 CRON_SECRET_KEY。

数据库(src/db/schema.ts)

  • news_items_cache、binance_alpha_news_cache、articles_cache
  • crypto_prices_cache、gas_fees_cache
  • push_subscriptions、binance_alpha_subscriptions、website_reminder_subscriptions(与提醒类 Cron)
  • 具体任务还涉及的其他表见对应 route.ts(如 cleanup-duplicate-events 等)。

2026-09 稳定性修复

cron-job.org 继续每 5 分钟调用,URL、GET/POST 和 Bearer 请求头不变。 上游请求限制为 6.5 秒,接口等待预算 24 秒;新闻批量写库、不同表并行写入。 数据库事务锁防止跨进程重复刷新。200 updated / degraded 表示新闻已写入; degraded 的 data.unavailable_sources 列出异常来源;already_running 表示已有任务执行。 全部来源不可用、写库失败或超过预算返回 503,保留现有新闻。

提醒通过 Next.js after() 在响应后执行,使用独立事务锁。刷新成功不等于提醒发送成功, 需另看 [CRON] Reminder 日志。超时任务仍保留清理回调,直到释放锁。

部署前备份数据库,并执行可重复运行的迁移:

psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f src/db/migrations/20260916_news_reliability.sql

迁移补齐事件关联、通知标记等缺失字段,并为新闻链接增加唯一索引;不删除旧事件和订阅。 历史事件默认抑制,只有新建事件进入待通知状态。若已有重复新闻链接,迁移会失败,不会自动删数据。 回滚代码时可保留新增字段和索引。

2026-09-16 实测 BlockBeats 公开 RSS 返回空 JSON,当前标记为来源异常;PANews、TechFlow 独立工作。新版 BlockBeats API 需可用凭据。验证使用模拟通知,不发送测试提醒;部署后观察自然定时执行。

新增 Decrypt(https://decrypt.co/feed)与 Cointelegraph(https://cointelegraph.com/rss) 官方 RSS 补充英文文章;共用超时、解析与独立来源状态,无需第三方代理或 API 密钥。

POST /api/cron/cleanup-duplicate-events 必须配置并携带 CRON_SECRET_KEY;未配置时拒绝执行清理。 Web Push 单次发送超时为 10 秒。验证使用模拟通知,不主动触发真实提醒。

定时任务与新闻刷新 | 追踪狗文档