首页 记一次定时任务管理系统的使用-gocron
文章
取消

记一次定时任务管理系统的使用-gocron

  最近发现系统中有很多脚本命令,都是通过服务器的crontab执行的,开始的时候倒也没发现什么问题,随着脚本的增多,问题也就来了:

1、脚本太多分散在不同的服务器上,不容易管理。 2、脚本执行的时间长,一个周期没有执行完,下一个周期又开始了,导致数据不完整和服务器压力的升高。

  出现了上述的问题,需要一套定时任务管理系统来集中管理定时任务,同时还要有单实例运行的功能。

调研

  不打算自己开发,在网上搜了一下,最终相中了两个:一个是Java开发的xxl-job;另一个是golang开发的gocron。经过测试,两个功能差不太多。最终因为gocrongolang开发的,不像xxl-job还要安装Java运行环境。最终选择了gocron

介绍

  • Web界面管理定时任务,这样管理就方便很多。
  • 支持crontab时间表达式,精确到秒。
  • 支持任务执行失败可重试。
  • 支持任务执行超时,强制结束。
  • 支持任务依赖配置,A 任务完成后再执行 B 任务。
  • 支持账户权限控制。
  • 任务类型:支持shell任务和HTTP任务。

部署

gocron架构图

  这里介绍一下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、这个地方要选择执行器。

测试

测试

  到这里就算部署完成了,如果要部署高可用,可以再部署一个调度器,做负载均衡即可。剩下的用户管理、系统设置等功能如果感兴趣试一试即可。

本文由作者按照 CC BY 4.0 进行授权

git提交规范

记一次canal的部署