定时任务的无服务器方案:Cloudflare Cron Triggers 自动运维

定时任务的无服务器方案:Cloudflare Cron Triggers 自动运维
定时任务的无服务器方案Cloudflare Cron Triggers 自动运维在独立产品上线后我们通常需要处理各种各样的“后台定期事务”每天凌晨清理一次数据库中的临时过期缓存和无效 Token。每天早上 8 点统计前一天的独立访客数与卡片生成量并推送到个人的飞书/Telegram 机器人。每隔 1 小时探测一次上游大模型 API 的连通性与健康状态。在传统架构下我们需要单独开一台 Linux 云服务器在 crontab 里面写一堆 shell 脚本还要随时担心机器宕机或内存耗尽。而在 Serverless 架构中Cloudflare Cron Triggers定时触发器允许我们将 Workers 脚本直接绑定到一个标准的 Cron 表达式上完全不需要维护任何长驻服务器即可实现毫秒级拉起、执行并自动销毁的零成本自动化运维。-------------------------------------------------------------------- | Cloudflare Cron Triggers 边缘自动运维架构 | -------------------------------------------------------------------- | [Cloudflare 全球边缘时钟调度器] | | | | | v (按照 Cron 表达式触发: 如 0 0 * * * 每日午夜) | | [Workers 运行时: scheduled(event, env, ctx) 入口] | | | | | ├── 1. 清理过期 Turso 数据库草稿记录 | | ├── 2. 统计昨日 UV/PV 并调用飞书 Webhook 推送手账日报 | | └── 3. 使用 ctx.waitUntil 确保异步任务完整落盘 | --------------------------------------------------------------------1. 配置 wrangler.toml 声明定时规则在wrangler.toml中通过triggers.crons数组声明一个或多个标准 5 字段 Cron 表达式name tide-auto-cron-worker main src/index.ts compatibility_date 2026-09-01 # 声明定时触发器规则 [triggers] crons [ 0 0 * * *, # 每天 UTC 00:00 (北京时间早 8:00) 执行日报推送 */30 * * * * # 每 30 分钟执行一次轻量缓存清理 ]2. Workers 脚本 scheduled 事件处理完整实现在入口文件src/index.ts中导出scheduled处理函数export interface Env { FEISHU_WEBHOOK_URL: string; APP_KV: KVNamespace; } export default { // 兼顾普通 HTTP 请求处理 async fetch(req: Request, env: Env, ctx: ExecutionContext): PromiseResponse { return new Response(Cron Worker Running OK); }, // 核心定时任务调度入口 async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext): Promisevoid { console.log([Cron Trigger] 任务触发时间戳: ${event.scheduledTime}, 规则: ${event.cron}); ctx.waitUntil( (async () { if (event.cron 0 0 * * *) { // 1. 执行每日数据聚合与日报推送 await sendDailyReportToFeishu(env); } else if (event.cron */30 * * * *) { // 2. 执行临时缓存清理 await cleanupExpiredKV(env); } })() ); }, }; // 发送轻量日报到飞书群机器人 async function sendDailyReportToFeishu(env: Env) { const payload { msg_type: text, content: { text: 听汐工具铺·每日晨报\n昨日独立访客与情绪卡片生成系统运行正常边缘延迟稳定在 25ms 左右。, }, }; await fetch(env.FEISHU_WEBHOOK_URL, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(payload), }); } // 模拟轻量清理 async function cleanupExpiredKV(env: Env) { console.log(正在扫描并清理过期临时缓存...); }3. ctx.waitUntil 的关键防坑用法Serverless 函数在主执行流程结束时会立即进入冻结或销毁状态。如果你的异步任务如发送飞书 Webhook 或写入日志没有await请求可能会被边缘节点强制掐断。务必使用ctx.waitUntil(promise)包裹所有异步任务明确告知运行时必须等待该 Promise 完全 resolve 后再休眠确保任务执行的 100% 可靠性。把琐碎的运维自动化每天早上一睁开眼就能在手机上看到昨日的运营简报独立开发也能拥有大厂级的运维从容感。

最新新闻

日新闻

周新闻

月新闻