六维教程

Cloudflare Workers 定时任务

很多业务需要定时执行,比如每天凌晨清理过期数据、每小时抓取一次价格、每周生成一份报表。Cloudflare 提供了 Cron Triggers 定时触发机制,直接在 Worker 上配置即可。

什么是 Cron Triggers

Cron Triggers 让 Worker 按设定的时间表自动运行,不需要用户请求触发。到点后平台会调用 Worker 的 scheduled 函数,代码在边缘节点执行,和普通请求一样有完整的资源环境。

配置定时计划

在 wrangler.toml 中添加触发器配置

name = "my-worker"
main = "src/index.js"
compatibility_date = "2026-01-01"

[triggers]
crons = ["0 8 * * *", "*/30 * * * *"]

crons 是一个数组,可以配置多条计划,上面的例子分别是”每天早上 8 点”和”每 30 分钟一次”。

编写 scheduled 处理函数

Worker 同时支持 fetchscheduled 两个入口

export default {
  // 定时任务入口
  async scheduled(event, env, ctx) {
    console.log("定时任务触发,计划表达式", event.cron);
    await doCleanup(env);
  },

  // 普通请求入口
  async fetch(request, env, ctx) {
    return new Response("hello");
  },
};

async function doCleanup(env) {
  // 清理过期数据等业务逻辑
  await env.DB.prepare("DELETE FROM sessions WHERE expired_at < ?")
    .bind(Date.now()).run();
}

scheduled 函数接收的 event 对象有两个常用属性

属性 说明
event.cron 触发本次执行的 cron 表达式
event.scheduledTime 计划执行的时间戳

一个 Worker 配了多条计划时,可以用 event.cron 判断当前是哪条计划触发,分发到不同的处理逻辑。

cron 表达式语法

cron 表达式由 5 段组成,依次是

位置 含义 取值范围
1 分钟 0-59
2 小时 0-23
3 1-31
4 1-12
5 星期 1-7(1 是周日)

常用写法示例

表达式 含义
* * * * * 每分钟
*/5 * * * * 每 5 分钟
0 * * * * 每小时整点
0 9 * * 1 每周日 9 点(1 是周日)
30 2 * * 1-5 周一至周五凌晨 2 点 30 分
0 0 1 * * 每月 1 日零点

有三个重要注意事项

注意点 说明
时区固定 UTC 北京时间比 UTC 快 8 小时,早上 8 点要写 0 0
星期从 1 开始 1 是周日,7 是周六,与常见 cron 工具不同
最小间隔 1 分钟 无法配置比每分钟更频繁的触发

限制

限制项 免费计划 付费计划
每账号数量 5 个 250 个
最小间隔 1 分钟 1 分钟
每次执行 CPU 10ms 30 秒
最长运行时长 15 分钟 15 分钟

本地测试

部署前先在本地验证定时逻辑。启动开发服务器时开启定时测试模式

wrangler dev --test-scheduled

然后手动触发一次定时任务

curl "http://localhost:8787/__scheduled?cron=*+*+*+*+*"

注意 cron 参数里的空格要用 + 号编码。触发后终端会显示 console.log 的输出,验证逻辑正确后再部署。

部署与线上验证

定时任务只有部署到线上才会真正生效

wrangler deploy

部署完成后,在仪表盘 Worker 的 触发器 页面可以看到配置的计划。用 wrangler tail 实时查看线上日志,到点后观察任务是否正常执行。

实用场景

场景 示例计划
清理过期数据 0 4 * * * 每天凌晨 4 点
定时抓取数据 */30 * * * * 每 30 分钟
生成日报 0 1 * * * 每天凌晨 1 点
缓存预热 0 6 * * * 每天清晨 6 点
发送提醒 0 9 * * 1-5 工作日早 9 点

注意事项

定时任务不会自动重试,执行失败只能等下次触发,所以代码里要有容错。复杂任务建议结合 KV、D1 记录执行状态,任务里等待网络请求的时间不占 CPU 配额,可以放心处理多步操作。

下一篇进入开发闭环的收尾环节,调试与线上部署。

上一篇 Cloudflare Workers D1 数据库
下一篇 Cloudflare Workers 调试与线上部署

上一篇
Cloudflare Workers D1 数据库
下一篇
Cloudflare Workers 调试与线上部署