定时任务管理系统 gocron、cronsun
项目开发中容易堆积较多定时脚本,最简单的是使用 crontab
但 crontab 存在较多缺点:
- 默认不支持秒级
- 任务管理分散,代码散落在各个机器,代码管理易丢失
- 可观测性弱,需要在各个脚本中开发告警、推送逻辑
- 查阅日志繁琐
……
通过调研有 cronsun、gocron 等任务调度开源项目
经初步了解,梳理两个项目特点和适用场景
shunfei/cronsun
项目地址:https://github.com/shunfei/cronsun
特点:分布式、注册机制、可靠性保证较强
适用场景:业务量级较大、资源较为丰富
资源与部署:cronweb、cronnode、Etcd、Mongo
可靠性说明:https://github.com/shunfei/cronsun/wiki/%E5%8F%AF%E9%9D%A0%E6%80%A7%E8%AF%B4%E6%98%8E
安装体验
TODO 遇到 docker-compose 部署问题,后续折腾好了补上
熟悉 docker 的朋友,帮看一眼是什么问题,调了好几次配置没解决 ToT..
https://link.zhihu.com/?target=https%3A//github.com/jsDotx3/cronsun-docker/issues/1
ouqiang/gocron
项目地址:https://github.com/ouqiang/gocron
特点:轻量、配置简单易上手,存在单点问题
适用场景:业务量级适中、追求低资源运行、脚本允许出现可能得短期中断(单点)
资源与部署:gocron-node、gocron、MySQL
安装体验
1.安装
项目自带 Docker 用于部署 gocron web 管理端
docker network create my_network
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 --network my_network -d mysql:latest
docker run --name gocron -p 5920:5920 --network my_network -d ouqg/gocron
2.初始化配置
通过上述步骤即可在本地部署 MySQL 和 gocron web 端,本地访问 http://localhost:5920/
mysql 去建个数据库,在 gocron web 后台输入 mysql 相关信息和系统登录管理员,即可完成系统初始化
3.任务配置
3.1 启动 gocron-node 任务节点
这里在本地 mac 编译好,并启动一个 gocron-node
git clone git@github.com:ouqiang/gocron.git
cd gocron
go mod tidy
make
./bin/gocron-node
3.2 配置任务节点
配置上述 mac 机启动的 gocron-node(容器访问宿主机,可用 host.docker.internal)
3.3 配置任务
3.4 配置告警
shell 类型,使用 exit 1 等非 0 退出,定义为执行失败,可对执行失败配置告警,这里企微比较常用,举例一下企微配置
打赏: 微信
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
go语言写的,为啥不直接用二进制文件运行啊。docket是不是有点多余~
现在习惯性用 docker 来部署应用,不需要操心环境配置,拿着配置文件就能一键启动,跨平台、省心 :)
docker 只是环境提前配置好了。不过跨平台就不存在吧,只能linux用啊(还有打包的镜像是区分cpu架构的)
嗯,运行环境是固定的~
提到的「跨平台」是指部署宿主机,可能不是那么恰当。用 docker 看 dockerfile 方便溯源部署信息(相当于记录环境部署文档了)