为什么 claude-code-templates 的 docs-monitor 在 wrangler dev 下不触发 cron?
2026/9/12 2:55:25 网站建设 项目流程

为什么 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 inwrangler 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 真实执行

确认是生产环境该触发而未触发时,按文档给出顺序核对:

  1. 部署(或修改wrangler.toml后重新部署):
npm run deploy # 等价于 wrangler deploy
  1. 查看实时日志,确认 cron 执行记录:
wrangler tail # 或 npm run tail

README 在 “Worker doesn't execute cron” 一节指定用wrangler tail观察 cron 执行,这是文档给出的核对方式。

  1. 通过状态端点确认 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" }
  1. 直接检查 KV 中的状态键,确认定时检查写入了last_checked
wrangler kv:key get last_checked --namespace-id=YOUR_KV_ID

YOUR_KV_ID替换为你执行wrangler kv:namespace create DOCS_MONITOR_KV时得到的命名空间 id(该 id 需与 cloudflare-workers/docs-monitor/wrangler.toml 中[[kv_namespaces]]段落的id一致)。

  1. 需要立即跑一次检查而不等到下一个 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” 一节给出的检查项:

  1. 列出已配置的 secret,确认TELEGRAM_BOT_TOKENTELEGRAM_CHAT_ID存在:
wrangler secret list
  1. 用 bot token 直接验证 bot 可用:
curl https://api.telegram.org/botYOUR_BOT_TOKEN/getMe

文档说明该请求应返回 bot 信息。

  1. 直接验证 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_KVwrangler.tomlid正确,并在修改配置后重新wrangler deploy
  • 修改了index.jswrangler.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 testwrangler 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询