什么是作业驱动插件
首先,我们通过一个示意图来了解TASKCTL对各种作业类型的调用过程,并理解什么是插件,以及插件的作用。
整个过程的解释如下:
- 调度核心发起一个作业的调度请求,并将A类型作业A_JOB1的完成描述信息传递出去。
- 在具体的执行节点代理端(哪个执行代理,由A_JOB1的agentid属性决定),一个叫ctlcpg的组件会接收第一步ctlfdc发出执行指令信息,并立即调用相应的插件程序(一般情况下,插件程序就是一个shell脚本),同时,将完整的A_JOB1描述信息传递到该插件。
- A插件程序通过统一入口参数接收完整的作业信息,解析该信息,并执行具体作业程序A_JOB1。
- A_JOB1作业程序根据插件传入的参数,做具体的业务处理。
由上可知,插件本质就是一个脚本程序(TASKCTL的插件不仅限于shell脚本,也可以是C程序),它根据统一参数接口获取信息,并解析出具体的作业程序名称、作业参数以及相应的环境信息等,同时,根据这些信息运行相应的作业。
为什么说TASKCTL插件很简单
试想一下,如果给足够的信息,我们一定可以快速通过一个shell脚本运行一个具体的作业。而有了驱动插件程序,只需简单的配置,我们就可以使用指定的作业类型。
插件的核心——统一的接口,它是怎么描述各种作业的完整信息
插件程序的6个统一入口参数,以及与作业定义属性的一一对应关系
- 每一种作业类型的插件都会通过插件脚本传入6个参数。
- 通过对应关系,系统自动将作业定义的progname、para、exppara、hostuser四个属性,完整地传入相应的插件程序。
- progname、para、exppara、hostuser具体表达什么,具体格式规则是什么,这就是插件与Designer应用之间的约定。总之,插件按具体约定规则,通过这四个属性,可以解析出描述一个作业的完整信息,并且,插件可以根据这些完整的信息,运行具体的作业程序即可。
- hostuser,是用于无代理执行的属性。如果该作业类型不提供无代理执行机制,该接口就不用;同时,在作业定义时,也不用定义hostuser属性。
作业日志统一获取接口
作业日志查看,是调度的重要的功能之一。
如果自己开发驱动插件,并自己定义一种相应的作业类型,要怎样处理,才可以在taskctl中查看作业的具体运行日志?
- 凡是通过插件运行的程序,只要是标屏显示的日志,TASKCTL即可自动捕获。
- 如果你的具体作业程序未将日志标屏输出,那么,在插件中,就需尽最大的可能,获取日志,并将该信息输出到屏幕。否则,在TASKCTL中,就无法查看相关作业类型的作业运行日志。
插件脚本举例
在TASKCTL产品服务端,自身带了很多作业类型以及相应的插件驱动程序,我们只要简单分析一下这些驱动程序,即可理解。
在此,给大家推荐一下几个具有代表性作业驱动程序。
1 python 【python作业类型】
插件路径:
代码语言:javascript复制$TASKCTLDIR/src/plugin/python/shell/cprunpython.sh
2 ktrjob 【kettle 转换类型】
插件路径:
代码语言:javascript复制$TASKCTLDIR/src/plugin/ktrjob/shell/cprun ktrjob.sh
3 oraproc 【oracle存储过程】
插件路径:
代码语言:javascript复制$TASKCTLDIR/src/plugin/oraproc/shell/cprun oraproc.sh
插件配置-定义作业类型
插件开发完后,需要部署插件、定义作业类型等操作
部署驱动插件
一般情况下,插件就是一个shell程序。编写完后,我们需要将插件程序部署到TASKCTL服务节点以及相应代理节点。
从理论上,我们可以将插件部署到TASKCTL安装用户的任意目录。但为了管理方便,我们还是遵循TASKCTL的一些管理规范。TASKCTL自身带了很多作业类型及其驱动插件,统一存放到$TASKCTLDIR/src/plugin下,并按每一种作业类型建立子目录存放。
配置作业类型
用admin用户登录桌面客户端admin组件, 进入以下界面即可配置。
关键定义项说明:
- 类型名程,为自己的作业类型改一个名称,比如:mysql等。
- 驱动定义,执行方式选择shell, 执行程序填写您插件程序部署的全路径。停止方式选command(如果您自定义一个停止插件也可以)
- 高级定义,一般采用缺省即可。
保存完毕后,您重新打开Designer,就可以看到您所添加的作业类型。
Designer中使用新建作业类型mysql
1 工具箱中出现新的作业类型mysql
2 代码中可以输入mysql作业类型
3 流程图中出现mysql作业节点