引
最近发现系统中有很多脚本命令,都是通过服务器的crontab
执行的,开始的时候倒也没发现什么问题,随着脚本的增多,问题也就来了:
1、脚本太多分散在不同的服务器上,不容易管理。 2、脚本执行的时间长,一个周期没有执行完,下一个周期又开始了,导致数据不完整和服务器压力的升高。
出现了上述的问题,需要一套定时任务管理系统
来集中管理定时任务,同时还要有单实例运行的功能。
调研
不打算自己开发,在网上搜了一下,最终相中了两个:一个是Java
开发的xxl-job
;另一个是golang
开发的gocron
。经过测试,两个功能差不太多。最终因为gocron
是golang
开发的,不像xxl-job
还要安装Java
运行环境。最终选择了gocron
。
介绍
- 有
Web
界面管理定时任务,这样管理就方便很多。 - 支持
crontab
时间表达式,精确到秒。 - 支持任务执行失败可重试。
- 支持任务执行超时,强制结束。
- 支持任务依赖配置,
A
任务完成后再执行B
任务。 - 支持账户权限控制。
- 任务类型:支持
shell
任务和HTTP
任务。
部署
这里介绍一下gocron
,从上图可以看出,它是有调度器和执行器两部分组成,数据存储在mysql
里。调度器可以部署多台做负载均衡。部署分为三部分:创建数据库、部署调度器、部署执行器。gocron
的下载地址:下载页面。
创建数据库
因为gocron
需要mysql
作为数据存储服务器。所有首先要安装mysql
数据库。这里不做详细介绍,有问题的可以网上搜一下。
这里先创建一个用户,然后创建数据库备用。
1
2
3
4
5
6
7
CREATE DATABASE `gocron` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; # 创建 程序连接数据库
grant all on `gocron`.* to gocron@'%' identified by '123456'; # 创建程序使用用户,并将对应库权限授予此用户进行使用
flush privileges;
部署调度器
调度器按照很简单:
1
2
3
4
5
6
wget https://github.com/ouqiang/gocron/releases/download/v1.5.3/gocron-v1.5.3-linux-amd64.tar.gz
tar zxvf gocron-v1.5.3-linux-amd64.tar.gz
./gocron-v1.5.3-linux-amd64/gocron web
这样就可以了。访问http://127.0.0.1:5920/
第一次访问会进入到安装页面。上面已经创建了数据库用户和数据库这里填上即可。
到这里调度器就安装好了,页面看着也很不错。要想使用还需要安装执行器。
部署执行器
1
2
3
4
5
6
7
wget https://github.com/ouqiang/gocron/releases/download/v1.5.3/gocron-node-v1.5.3-linux-amd64.tar.gz
tar zxvf gocron-node-v1.5.3-linux-amd64.tar.gz
./gocron-node-v1.5.3-linux-amd64/gocron-node
到这里执行器就安装好了。安装器默认端口是5921
,下面需要在系统内设置一下执行器。
到这里可以看到我们的节点已经正常了。
测试
到这里就安装完成了,我们这里做一个小测试看看效果。
这里标注的地方是需要注意的地方。
1、这个地方是可以实现依赖关系的。 2、这个地方可以保证一个没有执行完才能执行下一次。 3、这个地方要选择执行器。
到这里就算部署完成了,如果要部署高可用,可以再部署一个调度器,做负载均衡即可。剩下的用户管理、系统设置等功能如果感兴趣试一试即可。