概览
最近执行记录
| 任务 | 状态 | 开始时间 | 耗时 |
|---|---|---|---|
| 加载中... | |||
定时任务
| 名称 | 平台 | Cron | 状态 | 最后执行 | 下次执行 | 操作 |
|---|---|---|---|---|---|---|
| 加载中... | ||||||
执行历史
| 任务 | 状态 | 开始时间 | 耗时 | 响应码 | 重试 | 日志 |
|---|---|---|---|---|---|---|
| 加载中... | ||||||
平台连接
API Keys
| 名称 | 创建时间 | 最后使用 | 操作 |
|---|---|---|---|
| 加载中... | |||
使用文档
快速开始
CronHub 是一个运行在 Cloudflare Workers 上的定时任务管理平台,支持 GitHub Actions、Azure DevOps Pipelines、Google Apps Script 和 HTTP Webhook 四种触发方式。
前往「平台连接」,通过 GitHub OAuth 授权或手动填写 Token,添加一个平台连接。
前往「定时任务」,点击「+ 新建任务」,填写任务名称、Cron 表达式、选择平台和目标仓库/接口。
任务按计划自动执行,结果可在「执行历史」中查看,包含状态、耗时和响应日志。
概览页
登录后默认进入概览页,提供平台整体运行状态的一览视图。
统计卡片
| 卡片 | 说明 |
|---|---|
| 总任务数 | 所有任务总数,副标题展示活跃 / 暂停的任务拆分 |
| 今日执行(24h) | 最近 24 小时内首次执行(不含重试)的总次数,以及成功 / 失败数量 |
| 成功率(24h) | 最近 24 小时执行成功数 ÷ 总执行数,低于 70% 显示红色 |
| 失败次数(24h) | 最近 24 小时执行失败数,有失败时卡片边框变红提示 |
最近执行记录
展示最近 8 条执行记录,包含任务名称、状态、开始时间和耗时。点击右上角「↻ 刷新」可手动刷新数据。
GET /api/stats 接口获取,统计口径为最近 24 小时,且仅计入首次执行(attempt = 1),不包含自动重试记录,以准确反映任务本身的成功率。
定时任务
每个任务包含以下字段:
| 字段 | 说明 | 示例 |
|---|---|---|
名称 | 任务的显示名称,便于识别 | 每日数据同步 |
Cron | 触发时间规则,UTC 时区 | 0 1 * * * |
平台 | 执行方式:GitHub Actions / Azure DevOps / Google Apps Script / HTTP | GitHub Actions |
状态 | active(运行中)/ paused(已暂停) | active |
0 1 * * *。
任务操作
- 暂停 / 启用:点击任务行的「暂停」或「启用」按钮,立即生效,不影响历史记录。
- 立即执行:点击「▶ 运行」可跳过等待,立即触发一次执行。
- 编辑:修改任务配置后保存,下次执行时生效。
- 删除:删除任务及其所有执行历史,不可恢复。
失败重试
新建或编辑任务时,可在「失败重试」区域配置自动重试策略:
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 最大重试次数 | 任务失败后最多自动重试的次数,0 表示不重试 | 0(不重试) |
| 重试间隔 | 两次重试之间等待的秒数 | 60 秒 |
重试记录会在「执行历史」中独立显示,标注「重试 N」或「待重试」,可追溯完整的重试链路。重试不会影响下一次正常调度时间。
Cron 表达式
格式:分 时 日 月 周,共 5 段,均为 UTC 时区。
| 表达式 | 含义 | 北京时间参考 |
|---|---|---|
* * * * * | 每分钟 | — |
*/5 * * * * | 每 5 分钟 | — |
0 1 * * * | 每天 UTC 01:00 | 北京 09:00 |
0 16 * * * | 每天 UTC 16:00 | 北京 00:00 |
0 0 * * 1 | 每周一 UTC 00:00 | 北京周一 08:00 |
0 2 1 * * | 每月 1 日 UTC 02:00 | 北京 10:00 |
30 8 * * 1-5 | 工作日 UTC 08:30 | 北京 16:30 |
平台连接
平台连接保存第三方服务的访问凭证,任务执行时通过对应连接调用目标平台。
连接 GitHub(推荐:OAuth 设备码)
- 点击「平台连接」页右上角 Connect GitHub
- 填写连接名称(如「个人账号」「公司账号」),点击「开始授权」
- 浏览器自动打开
github.com/login/device - 在 GitHub 页面输入显示的 8 位验证码
- 授权完成后弹窗自动显示头像和用户名,点击「完成」
手动添加 Token
点击「+ 其他连接」,选择平台类型并填写 Token:
| 类型 | Token 来源 | 所需权限 |
|---|---|---|
| GitHub | Settings → Developer settings → Personal access tokens | repo、workflow |
| Azure DevOps | User Settings → Personal access tokens | Build(读写)、Release(读写) |
| Google Apps Script | OAuth2 Access Token(含 script.execute scope) | 脚本执行权限 |
| Cloudflare | My Profile → API Tokens | Workers 读写权限 |
| HTTP | 自定义 Bearer Token | — |
编辑平台连接
点击平台连接卡片上的「编辑」按钮,可以:
- 修改名称:所有连接类型均可修改显示名称
- 更换 Token:手动添加的连接可替换 Token(GitHub PAT 更换后会自动同步用户名和头像);OAuth 设备码连接的 Token 由授权流程管理,不支持手动修改
GitHub Actions 任务
通过调用 GitHub API 触发仓库的 workflow_dispatch 事件来执行任务。
配置字段
| 字段 | 说明 |
|---|---|
| 平台连接 | 选择已连接的 GitHub 账号 |
| 仓库 | 从列表选择,或点击「➕ 新建仓库...」直接创建 |
| Workflow | 选择 .github/workflows/ 下的 yml 文件,或点击「➕ 创建新 Workflow...」 |
| Ref | 触发的分支或 Tag,默认 main |
| Inputs | 可选,JSON 格式传给 Workflow 的参数 |
新建 / 编辑 Workflow 文件
- 在 Workflow 下拉选「➕ 创建新 Workflow...」,选择模板(HTTP 请求 / Python / Node.js / 空白),在编辑器中修改后点「创建文件」,文件将直接提交到 GitHub 仓库。
- 选中已有 Workflow 后,点右侧 ✏️ 按钮可加载当前内容进行编辑,保存后自动提交更新。
on: workflow_dispatch 触发器,否则无法被 API 触发。
Workflow 示例
name: 定时数据同步
on:
workflow_dispatch:
inputs:
env:
description: '环境'
default: 'production'
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 执行同步脚本
run: python sync.py
env:
DB_URL: ${{ secrets.DB_URL }}
Workflow 可视化编辑器
Workflow 编辑器内置实时流程图,让 YAML 结构一目了然。点击右上角标签切换三种视图:
| 视图 | 说明 |
|---|---|
| 代码 | 纯 YAML 编辑区,全屏显示,适合大段编辑 |
| 分屏 | 左侧 YAML 编辑,右侧实时渲染执行流程图(默认打开) |
| 可视化 | 全屏流程图,清晰展示触发器 → Job → Steps 完整结构 |
流程图元素说明
- 触发器卡片:识别
schedule(⏰,展示 cron 表达式)、workflow_dispatch(🖱️ 手动)、push(📤)、pull_request(🔀)等类型 - Job 容器:显示 Job 名称和 Runner 环境(如
ubuntu-latest) - 步骤列表:每个 Step 按顺序编号,区分
uses(引用 Action,紫色标签)和run(执行命令,黄色标签)
#)、env: / with: 子块均不影响解析。
新建 Workflow 时的模板选择
点击「➕ 创建新 Workflow...」后,可从以下内置模板快速开始:
| 模板 | 适用场景 |
|---|---|
| HTTP 请求 | 调用外部 API / Webhook,内置 curl 示例 |
| Python 脚本 | 运行 Python 任务,预置依赖安装步骤 |
| Node.js 脚本 | 运行 Node.js 任务,预置 npm install 步骤 |
| 空白模板 | 从头编写,仅包含最基础的触发器配置 |
Azure DevOps Pipelines 任务
通过 Azure DevOps REST API 触发指定 Pipeline 运行,支持传入变量覆盖默认值。
前置条件
- 在「平台连接」中添加类型为 Azure DevOps 的连接,填写 Organization 名称和 Personal Access Token
- PAT 需具备 Build(读写) 权限,若需触发 Release Pipeline 还需 Release(读写)
配置字段
| 字段 | 说明 |
|---|---|
| 平台连接 | 选择已添加的 Azure DevOps 连接(含 Organization 信息) |
| Project | Azure DevOps 项目名称,从下拉列表选择 |
| Pipeline | 要触发的 Pipeline,从下拉列表选择;可点击 👁️ 按钮预览 Pipeline YAML 结构 |
| Branch / Ref | 触发的分支,默认 main |
| Variables(可选) | JSON 格式,覆盖 Pipeline 中的变量,如 {"ENV": "production"} |
Pipeline 可视化预览
选择 Pipeline 后,点击右侧 👁️ 按钮可加载 YAML 文件并以流程图方式展示 Stage → Job → Step 结构,支持多 Stage 依赖关系可视化。
触发示例(API)
curl -X POST https://your-worker.workers.dev/api/tasks \
-H "Authorization: Bearer <key>" \
-H "Content-Type: application/json" \
-d '{
"name": "每日构建",
"cron": "0 2 * * *",
"platform": "azure_devops",
"platform_connection_id": "<connection-id>",
"config": {
"project": "MyProject",
"pipeline_id": 42,
"ref": "main",
"variables": { "ENV": "production" }
}
}'
Google Apps Script 任务
通过 Google Apps Script Execution API 定时调用脚本中的指定函数,适合操作 Google Workspace(Sheets、Drive、Gmail 等)的自动化场景。
前置条件
- 在 Google Cloud Console 启用 Apps Script API
- 打开脚本编辑器,点击「部署 → 新建部署 → 类型选 API 可执行文件」并发布
- 获取含
https://www.googleapis.com/auth/script.executescope 的 OAuth2 Access Token - 在「平台连接」中添加类型为 Google Apps Script 的连接,Token 填入上一步获取的 Access Token
配置字段
| 字段 | 说明 |
|---|---|
| 平台连接 | 选择已配置 OAuth Token 的 Google Apps Script 连接 |
| Script ID | 脚本 URL 中的 ID,格式:script.google.com/d/{Script ID}/edit |
| 函数名 | 脚本中要执行的顶层函数名(区分大小写),如 syncData |
| 参数(可选) | JSON 数组格式,传给函数的参数列表,如 ["production", 100] |
| 开发模式 | 勾选后在最新未发布版本上运行,仅脚本所有者可用,调试时使用 |
脚本函数示例
// 脚本中的顶层函数(需部署为 API 可执行文件)
function syncSheetData(env, limit) {
const sheet = SpreadsheetApp.openById('your-sheet-id').getActiveSheet()
// 执行数据同步逻辑...
Logger.log('同步完成,环境:' + env + ',条数:' + limit)
}
HTTP 任务
直接向指定 URL 发送 HTTP 请求,适合调用 Webhook、触发自有服务接口等场景。
| 字段 | 说明 |
|---|---|
| URL | 目标接口地址,需包含协议(https://) |
| Method | GET / POST / PUT / DELETE / PATCH |
| Headers | JSON 格式,如 {"Authorization":"Bearer xxx"} |
| Body | 请求体,POST/PUT 时使用,JSON 字符串 |
API 调用
所有操作均可通过 REST API 完成,适合与 CI/CD 或其他系统集成。请求时需在 Header 中携带 API Key。
Authorization: Bearer <your-api-key>
常用接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/stats | 获取概览统计(任务数 / 24h 执行数 / 成功率 / 最近记录) |
| GET | /api/tasks | 获取所有任务列表 |
| POST | /api/tasks | 创建新任务 |
| POST | /api/tasks/:id/trigger | 立即执行一次任务 |
| PATCH | /api/tasks/:id | 更新任务(含暂停/启用) |
| DELETE | /api/tasks/:id | 删除任务 |
| GET | /api/executions | 获取执行历史 |
| GET | /api/platforms | 获取平台连接列表 |
| PATCH | /api/platforms/:id | 修改平台连接名称或 Token |
| DELETE | /api/platforms/:id | 删除平台连接 |
创建任务示例
curl -X POST https://your-worker.workers.dev/api/tasks \
-H "Authorization: Bearer <key>" \
-H "Content-Type: application/json" \
-d '{
"name": "每日备份",
"cron": "0 2 * * *",
"platform": "github",
"platform_connection_id": "<connection-id>",
"config": {
"owner": "your-org",
"repo": "your-repo",
"workflow_id": "backup.yml",
"ref": "main"
}
}'
常见问题
- HTTP 任务:目标 URL 不可达、返回了 4xx/5xx 状态码
- GitHub 任务:Token 权限不足(需要
repo、workflow)、Workflow 文件缺少workflow_dispatch触发器、仓库不存在
- 触发器:
schedule(含 cron 表达式)、workflow_dispatch、push、pull_request等 - Job 配置:
runs-on、timeout-minutes等属性 - Steps:
uses(引用 Action)、run(执行命令)、name(步骤名称) - 步骤内
env:、with:子块(不影响流程图解析)
# ...)会被自动忽略,步骤之间的空行不影响解析。
success 仅代表触发请求被 ADO 接受(HTTP 200)。若需查看 Pipeline 运行结果,请直接前往 Azure DevOps 控制台查看。若调度器在 60 秒内未完成触发,该执行会被标记为「僵尸任务」并置为 failed。
- 401:PAT 已过期或填写有误,重新生成并在平台连接中更新 Token。
- 403:PAT 权限不足,需在 Azure DevOps 中勾选 Build → Read & execute 和 Release → Read, write & execute。
- 确认 Organization、Project、Pipeline ID 三个字段填写正确(Project 大小写敏感)。
- 确认脚本已在 Apps Script 编辑器中手动执行过一次,首次运行需授权 OAuth 范围。
- 脚本所在 GCP 项目需开启 Apps Script API(Google Cloud Console → API & Services)。
- 平台连接中的 Token 须包含
https://www.googleapis.com/auth/script.execute范围。 - 若使用 Service Account,确认已在脚本共享设置中赋予该账号「编辑者」权限。