1762 字
9 分钟
CF-Cron - Cloudflare Worker 定时任务管理系统

CF-Cron - Cloudflare Worker 定时任务管理系统#

📝 项目概述#

CF-Cron 是一款基于 Cloudflare Workers 和 D1 数据库构建的定时任务管理系统,灵感来源于 gocron 的设计思路。该系统专注于 HTTP 请求类型的定时任务管理,并提供了功能完整的 Web 管理界面,方便用户直观地操作和监控定时任务。

✨ 核心功能#

  • 完整的任务生命周期管理:支持创建、编辑、删除、启用/禁用定时任务
  • 灵活的 HTTP 请求支持:兼容 GET、POST 等多种请求方法
  • 高度自定义配置:允许设置自定义请求头和请求体
  • 详细的日志记录系统:完整记录任务执行日志和系统登录日志
  • 精细的角色权限控制:区分管理员和普通用户权限
  • 现代化响应式界面:基于 Ant Design 构建的美观用户界面
  • 性能优化机制:实现任务缓存,减少数据库查询压力
  • 智能 Token 管理:Token 过期后自动跳转到登录页面
  • 资源使用监控:优化任务执行过程中的资源消耗

🛠️ 技术架构#

前端技术栈#

  • React + TypeScript:构建现代化、类型安全的前端应用
  • Vite:快速的前端构建工具
  • Ant Design:提供丰富的 UI 组件
  • React Router:管理前端路由
  • Fetch API:处理 HTTP 客户端请求

后端技术栈#

  • Cloudflare Workers:无服务器计算平台
  • Hono Web 框架:轻量高效的 API 框架
  • Cloudflare D1 数据库:SQLite 兼容的边缘数据库
  • JWT 认证:安全的用户身份验证
  • Cron 表达式解析:精确调度定时任务

📁 项目结构#

cf-cron/
├── client/ # 前端应用
│ ├── public/ # 静态资源文件
│ ├── src/ # 前端源代码
│ │ ├── components/ # 可复用组件
│ │ ├── pages/ # 页面组件
│ │ ├── App.tsx # 应用主入口
│ │ └── main.tsx # 渲染入口
│ ├── package.json # 前端依赖配置
│ └── vite.config.ts # Vite 构建配置
├── server/ # 后端服务
│ ├── routes/ # API 路由定义
│ ├── services/ # 业务逻辑层
│ ├── sql/ # 数据库相关文件
│ ├── index.ts # 后端应用入口
│ ├── package.json # 后端依赖配置
│ └── wrangler.toml # Cloudflare Workers 配置
├── .gitignore # Git 忽略规则
└── README.md # 项目文档

🚀 部署指南#

1. 环境准备#

  • Node.js 20+ 运行环境
  • npm 或 yarn 包管理工具
  • Cloudflare 账户
  • Wrangler CLI 工具(npm install -g wrangler

2. 依赖安装#

前端依赖#

Terminal window
cd client
npm install

后端依赖#

Terminal window
cd server
npm install

3. 本地开发#

启动后端服务#

Terminal window
cd server
npm run dev -- --test-scheduled

服务将运行在 http://localhost:8787

启动前端开发服务器#

Terminal window
cd client
npm run dev

前端将运行在 http://localhost:5173

4. Cloudflare 部署#

准备工作#

  1. 登录 Cloudflare 账户
  2. 创建新的 Worker 项目
  3. 配置 D1 数据库(命名为 cf-cron-db

配置 Wrangler#

编辑 server/wrangler.toml 文件:

name = "cf-cron"
main = "index.ts"
compatibility_date = "2025-12-08"
d1_databases = [
{
binding = "DB",
database_name = "cf-cron-db",
database_id = "" # 填写 Cloudflare 控制台中的数据库 ID
}
]
[vars]
JWT_SECRET = "" # 配置安全的 JWT 密钥
[triggers]
crons = ["* * * * *"] # 每分钟检查一次任务

数据库初始化#

Terminal window
cd server
npm run db:migrate

部署后端#

Terminal window
cd server
npm run deploy

配置前端 API 地址#

client/.env 文件中添加:

VITE_SERVER_URL=https://YOUR_WORKER_NAME.YOUR_ACCOUNT.workers.dev/api

构建前端#

Terminal window
cd client
npm run build

部署前端#

client/dist 目录部署到 Cloudflare Pages。

📊 数据模型#

用户表 (users)#

  • id: 用户唯一标识
  • username: 用户名(唯一)
  • password: 密码哈希值
  • salt: 密码加密盐值
  • email: 邮箱地址(唯一)
  • is_admin: 是否为管理员
  • status: 用户状态(启用/禁用)
  • created: 创建时间
  • updated: 更新时间

任务表 (tasks)#

  • id: 任务唯一标识
  • name: 任务名称
  • level: 任务优先级
  • spec: Cron 表达式
  • protocol: 执行协议(1=HTTP)
  • command: 请求 URL
  • http_method: HTTP 请求方法
  • timeout: 超时时间(秒)
  • retry_times: 失败重试次数
  • retry_interval: 重试间隔(秒)
  • status: 任务状态(启用/禁用)
  • request_headers: HTTP 请求头(JSON 格式)
  • request_body: HTTP 请求体
  • created: 创建时间
  • deleted: 删除时间

🔐 系统默认账户#

系统初始化后自动创建默认管理员账户:

  • 用户名: admin
  • 密码: 123456

⚠️ 安全提示:首次登录后请立即修改默认密码!

📖 使用教程#

1. 登录系统#

访问部署后的前端页面,使用默认账户登录。

2. 任务管理#

创建新任务#

  1. 导航至「任务管理」→「新建任务」
  2. 填写任务基本信息:名称、Cron 表达式
  3. 配置 HTTP 请求:方法、URL、请求头、请求体
  4. 设置高级选项:超时时间、重试策略
  5. 确认任务状态并保存

执行任务#

在任务列表中找到目标任务,点击「执行」按钮立即运行任务。

监控任务#

通过「任务日志」查看所有任务的执行历史和结果。

3. 用户管理(管理员功能)#

  • 查看系统用户列表
  • 创建新用户并分配权限
  • 编辑现有用户信息
  • 禁用或启用用户账户

⏰ Cron 表达式语法#

系统采用标准 5 位 Cron 表达式格式:

┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日 (1-31)
│ │ │ ┌───────────── 月 (1-12)
│ │ │ │ ┌───────────── 星期 (0-6) (0 表示星期日)
│ │ │ │ │
* * * * *

常用表达式示例#

  • * * * * * - 每分钟执行
  • 0 * * * * - 每小时执行
  • 0 0 * * * - 每天午夜执行
  • 0 0 * * 0 - 每周日午夜执行
  • 0 0 1 * * - 每月1日午夜执行

🔍 故障排查#

任务执行失败#

  • 检查任务是否已启用
  • 验证 Cron 表达式是否正确
  • 确认目标 URL 是否可访问
  • 查看任务日志获取详细错误信息

登录问题#

  • 确认用户名和密码是否正确
  • 检查后端服务是否正常运行
  • 查看浏览器控制台的错误信息

部署问题#

  • 确认 Wrangler 配置文件中的 crons 触发器已设置
  • 检查 Cloudflare Worker 的运行状态
  • 验证数据库连接配置是否正确

🛡️ 安全最佳实践#

  1. 修改默认凭证:首次部署后立即更改管理员密码
  2. 启用 HTTPS:确保所有通信通过加密通道传输
  3. 访问控制:使用 Cloudflare Access 限制管理界面访问
  4. 定期备份:建立 D1 数据库的定期备份机制
  5. 强密码策略:为所有用户账户设置复杂密码
  6. 最小权限原则:仅为必要用户分配管理员权限

🤝 参与贡献#

欢迎通过 GitHub Issues 和 Pull Request 参与项目改进,共同构建更完善的定时任务管理系统!

📄 开源许可#

本项目采用 MIT License 开源协议。

📞 支持与反馈#

如有任何问题或建议,欢迎通过 GitHub Issues 提交反馈。


免责声明:本系统主要面向学习和内部使用场景,生产环境部署请确保实施充分的安全措施。

项目地址https://github.com/MuchenNianying/cf-cron

CF-Cron - Cloudflare Worker 定时任务管理系统
https://fuwari.vercel.app/posts/cloudflare/cf-cron/
作者
暮晨念影
发布于
2026-02-13
许可协议
CC BY-NC-SA 4.0

评论