多机配置同步 crontab 任务较为繁琐,查询任务执行列表不方便,且宕机会造成任务丢失,Quartz 太复杂了,只需要一个并发同步任务的调度器即可。
master:在 etcd 中,对任务进行简单的增删改查,提供 web 操作界面。
worker:从 etcd 同步任务到内存,并发调度、执行任务。
创建 docker 本地环境:
# 下载镜像
docker pull bitnami/etcd:latest
# 运行服务
docker run -d --name myetcd --publish 2379:2379 \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_ADVERTISE_CLIENT_URLS=http://myetcd:2379 \
bitnami/etcd:latest
贴士 :Go1.13/1.14 项目在启动时,由于 go mod 包版本原因会报如下错误:undefined: balancer.PickOptions
,可以在 go.mod 中添加:replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
。
# 启动 master,这是默认启动方式,可以忽略 -s 参数
go run main.go -s master
# 启动 worker
go run main.go -s worker
# 启动 frontend开发环境
cd frontend
npm run serve
任务保存数据为:
[
{
"name": "/job/demo1",
"command": "echo 111",
"expr": "*/1 * * * * * *"
},
{
"name": "/job/demo2",
"command": "echo 222",
"expr": "*/2 * * * * * *"
},
{
"name": "/job/demo3",
"command": "echo 333",
"expr": "*/5 * * * * * *"
}
]