为什么 claude-code-templates 的 docs-monitor 在 wrangler dev 下不触发 cron?
【免费下载链接】claude-code-templatesCLI tool for configuring and monitoring Claude Code项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-templates
如果你在本地用wrangler dev跑 claude-code-templates 仓库里的 docs-monitor Worker,等待wrangler.toml里配置的定时触发却始终等不到一次执行,这通常不是配置写错了。docs-monitor 是仓库中用于监控 Claude Code 文档页面(https://code.claude.com/docs)变化并通过 Telegram 推送通知的 Cloudflare Worker,文档在 cloudflare-workers/docs-monitor/README.md 的 Troubleshooting 一节中明确说明:cron 触发只在生产环境(部署后)生效,wrangler dev本地会话中不会触发。本文基于仓库文档,说明如何确认这一行为、如何在本地替代验证定时逻辑,以及在部署后如何核对 cron 确实在跑。
先确认现象:cron 只在部署后运行
cloudflare-workers/docs-monitor/README.md 的 “Worker doesn't execute cron” 一节原文结论是:
- Cron triggersonly work in production(after deploy)
- They don't work in
wrangler dev - Check via CLI:
wrangler tailto see cron executions
也就是说,本地npm run dev(对应 cloudflare-workers/docs-monitor/package.json 中的"dev": "wrangler dev")只启动本地 Worker 会话,供你调试fetch处理函数和 HTTP 端点,不会按[triggers]里的 cron 表达式定时调用scheduled入口。仓库当前 cloudflare-workers/docs-monitor/wrangler.toml 中的配置是:
[triggers] crons = ["0 * * * *"]README 的 Configuration 一节另列出了每 6 小时("0 */6 * * *")、每 4 小时、每 2 小时、每 30 分钟等可选频率,修改后需要重新执行npm run deploy才会生效。
所以排查的第一步不是改配置,而是确认:你所在的运行环境到底是本地 dev 会话还是已部署的生产 Worker。
在本地验证 scheduled 逻辑:用项目提供的 cron 测试入口
wrangler dev不触发 cron,但仓库提供了在本地测试定时任务的命令。cloudflare-workers/docs-monitor/package.json 定义了:
"test": "wrangler dev --test-scheduled"README 的 “Local development (CLI)” 一节把npm run test注释为 “Test cron job locally”。执行:
cd cloudflare-workers/docs-monitor npm run test这是文档给出的在本地验证 cron 逻辑的路径,替代了在 dev 会话里“干等触发”。
有一点在解读本地运行结果时需要注意:cloudflare-workers/docs-monitor/index.js 中scheduled处理函数的逻辑是——当 KV 中没有last_hash时(首次运行),只把当前内容哈希写入 KV,不发送任何 Telegram 通知;只有当新哈希与last_hash不同时才推送 “CHANGE DETECTED!”;无变化时只更新last_checked时间戳。因此如果本地测试跑完后 Telegram 没有收到消息,先区分是“没运行”还是“运行了但属于首次运行/无变化,按设计不通知”。
部署后用 wrangler tail 核对 cron 真实执行
确认是生产环境该触发而未触发时,按文档给出顺序核对:
- 部署(或修改
wrangler.toml后重新部署):
npm run deploy # 等价于 wrangler deploy- 查看实时日志,确认 cron 执行记录:
wrangler tail # 或 npm run tailREADME 在 “Worker doesn't execute cron” 一节指定用wrangler tail观察 cron 执行,这是文档给出的核对方式。
- 通过状态端点确认 Worker 状态。文档示例:
curl https://claude-docs-monitor.YOUR-USERNAME.workers.dev/status其中YOUR-USERNAME替换为你的 Cloudflare 账户子域。文档展示的响应格式(示例结果):
{ "status": "running", "lastHash": "a1b2c3d4...", "lastChecked": "2026-01-01T10:00:00.000Z", "lastChange": "2025-12-28T14:30:00.000Z", "monitoredUrl": "https://code.claude.com/docs" }- 直接检查 KV 中的状态键,确认定时检查写入了
last_checked:
wrangler kv:key get last_checked --namespace-id=YOUR_KV_IDYOUR_KV_ID替换为你执行wrangler kv:namespace create DOCS_MONITOR_KV时得到的命名空间 id(该 id 需与 cloudflare-workers/docs-monitor/wrangler.toml 中[[kv_namespaces]]段落的id一致)。
- 需要立即跑一次检查而不等到下一个 cron 点时,使用文档给出的手动触发端点。先设置触发密钥:
wrangler secret put TRIGGER_SECRET然后:
curl -X POST https://claude-docs-monitor.YOUR-USERNAME.workers.dev/trigger \ -H "Authorization: Bearer YOUR_TRIGGER_SECRET"YOUR_TRIGGER_SECRET替换为你上面设置的值。/trigger端点会调用与 cron 相同的scheduled逻辑,适合用来区分“定时没跑”和“跑了但没通知”:如果手动触发能产生 KV 更新而 cron 没有,问题就在 cron 触发本身(即尚未部署或仍停留在 dev 会话)。
定时任务跑了但 Telegram 收不到通知时,按文档核对这几项
README 的 “No notifications received” 一节给出的检查项:
- 列出已配置的 secret,确认
TELEGRAM_BOT_TOKEN和TELEGRAM_CHAT_ID存在:
wrangler secret list- 用 bot token 直接验证 bot 可用:
curl https://api.telegram.org/botYOUR_BOT_TOKEN/getMe文档说明该请求应返回 bot 信息。
- 直接验证 chat ID 与发消息链路:
curl -X POST https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage \ -d chat_id=YOUR_CHAT_ID \ -d text="Test"另外两类文档明确列出的相关错误:
- “KV namespace not found”:确认已执行
wrangler kv:namespace create DOCS_MONITOR_KV、wrangler.toml中id正确,并在修改配置后重新wrangler deploy。 - 修改了
index.js或wrangler.toml但行为未变:文档要求重新wrangler deploy,并用wrangler deployments list/wrangler deployments view <deployment-id>查看部署状态。
一个可选的长期监控手段在 cloudflare-workers/docs-monitor/wrangler.toml 的注释中说明:设置可选 secretSENTRY_DSN后,在 Sentry 中配置 slug 为docs-monitor的 Cron Monitor,当该检查完全停止运行时会被告警。
边界与限制
- 本地
wrangler dev会话不触发 cron 是文档明确的行为说明,不能通过改wrangler.toml解决;本地验证定时逻辑用npm run test(wrangler dev --test-scheduled),生产验证用wrangler tail加/status、KV 状态键。 - 首次运行只写哈希不通知、无变化不通知是
index.js中写明的设计,不要把它们当作“通知失败”。 - 若要把监控频率改为每 6 小时等,按 README 修改
[triggers] crons后必须npm run deploy重新部署才生效。
【免费下载链接】claude-code-templatesCLI tool for configuring and monitoring Claude Code项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-templates
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考