刚刚开始使用XXL-JOB任务调度框架,使用Java Bean方式开发很方便。不过google了一下并没有详细的关于如何使用XXL-JOB调度shell脚本的介绍,本文记录一下。

首先看一下xxl-job文档中的原理说明

原理:

脚本任务的源码托管在调度中心,脚本逻辑在执行器运行。当触发脚本任务时,执行器会加载脚本源码在执行器机器上生成一份脚本文件,然后通过Java代码调用该脚本;并且实时将脚本输出日志写到任务日志文件中,从而在调度中心可以实时监控脚本运行情况

官方参考:5.5.3 GLUE模式(Shell) + GLUE模式(Python) + GLUE模式(NodeJS)

需求:

比如说你的xxl-job admin调度中心在192.168.211.101上

你想调度192.168.211.2上的/usr/local/helloworld.sh脚本文件

怎么办呢?

 

开发步骤:

1. 配置执行器

可以参照xxl-job源码包下的xxl-job-executor-sample-springboot写一个简单的执行器,需要注意的是,即便你只想调度shell,java代码中并没有要调度的任务,仍然需要这个执行器(至于说为什么,可以参考前面的调度shell的原理)

这里就是在192.168.211.2启动了一个8081端口的spring boot服务,并且暴露的与xxl-job admin通信的netty server port为9999

2. 创建任务

3. 编写glue脚本

4. 测试执行过程

其执行日志

我们进到执行器所在机器192.168.211.2的/data/applogs/xxl-job/jobhandler/gluesource路径下,看到其生成了2_1562216699000.sh文件

打开发现就是我们编写的glue脚本

其执行日志记录在/data/applogs/xxl-job/jobhandler/2019-07-04下

打开文件

就是我们在xxl-job admin中看到的执行日志

 

xxl-job的工作过程如下:

在xxl-job admin调度中心先触发任务,然后通过执行器注册的netty通信server port发送执行命令(无论是java定时任务,还是shell脚本任务),发送的执行命令其实就是告诉9999端口去8081的endpoint执行指定JobHandler的execute方法(具体是使用指定JobHandler的名称查找jvm中@JobHandler容器获取到类的信息后利用反射机制去执行)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐