定时任务与新闻刷新
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_cachecrypto_prices_cache、gas_fees_cachepush_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 秒。验证使用模拟通知,不主动触发真实提醒。