做后端同学应该都遇到过:业务里一堆定时任务散落在各个微服务,crontab 难管理、失败无日志、重试靠手写、暂停恢复没有入口......自己造一套调度平台又怕重。
最近我把内部用的调度平台整理开源了 ------ krono-job,主打「零侵入 + 单镜像交付」。
它解决了什么
- 下游零侵入 :业务服务被动接收触发(HTTP Webhook 或 gRPC),不需要引入任何 SDK、不需要改代码。
- 一条命令跑全套 :
docker run一个镜像,内置 Web/API + 调度内核 + Worker + PostgreSQL + Redis,无需外部依赖。 - 配置即任务 :任务在
jobs.yaml里声明式定义,支持 fsnotify 热重载,改完文件不用重启。 - 数据库只有 2 张表:管理员表 + 执行日志表,暂停态存 Redis,极简。
架构一览
arduino
【Vue3 管理后台】 ──JWT──► 【Gin 网关】 ──► 【Redis 调度总线】
│
【Asynq Scheduler】──cron 推送──►【Asynq Worker】
│
HTTP Webhook / gRPC 调用
│
下游业务微服务
运维监控(重试、死信、队列调优)交给独立的 Asynqmon UI,与平台解耦。
30 秒跑起来
bash
docker run -d --name krono-job \
-p 10010:10010 -p 5432:5432 -p 6379:6379 \
-e KRONO_JWT_SECRET=请改成随机长字符串 \
krono-job:latest
打开 http://localhost:10010 就能看到管理后台。
加一个 HTTP 任务,只改 yaml
yaml
jobs:
- name: 订单超时自动取消
task_type: order_timeout_cancel
cron: "0 */5 * * *" # 每 5 分钟
protocol: http
endpoint: "http://order-svc:8080/api/timeout/cancel"
method: POST
payload:
scene: "auto_expire"
gRPC 任务也只需在 yaml 里声明 endpoint、grpc_service/method、request_type、payload,参数全在配置里,不写死在代码 ,新增下游服务最多加一行 import _。
管理后台长啥样
登录、仪表盘(执行趋势 + 任务排行榜)、任务列表(暂停/恢复/立即执行)、执行日志(分页/过滤/排序/详情)、用户管理,一套齐全。





技术栈
Go 1.26 · Gin · Asynq · PostgreSQL 16 · Redis 7 · Vue3(go:embed 打包进二进制)· JWT · bcrypt
开源地址
- GitHub:github.com/haioa/krono...
- Gitee:gitee.com/haioa/krono...
欢迎 Star / Issue / PR,也欢迎在评论区聊聊你们团队的定时任务是怎么管的。