我们都知道TASKCTL支持任意作业类型的扩展,但目前 TASKCTL 6.x 版本中并没有内置 informatica 的作业插件。通过如下文档介绍使 TASKCTL 6.x 支持调度 informatica 作业类型的步骤,一方面解决一些朋友迫切的 informatica 调度需求,另一方面抛砖引玉,让大家能够在TASKCTL中扩展更多的适应自己需求的作业插件。
其实在论坛中已经有 informatica 插件的介绍,只是是适配 TASKCTL 4.X版本的,4.X版本插件接口参数只有三个 1. progname、2. para、3. exppara ;从6.x后丰富为6个,所以需要重新适配,适配参照原 4.X 的帖子和扩展其他作业类型的帖子而来
http://www.taskctl.com/forum/detail_79.html
http://www.taskctl.com/forum/detail_33.html
1、在 $TASKCTLDIR/src/plugin/informatica/shell/ 目录中新增 cpruninfajob.sh 作业插件,实际上就是一个shell程序,代码如下:
#!/bin/sh #------------------------------------------------------------------------------ # (一) 功能: informatica workflow 以 shell方式执行驱动插件程序 # (二) 参数: # 1. tccid: 【无用】容器(流程或定时器)ID # 2. jobid: 【无用】作业ID # 3. progname 【有用】对应相应任务的progname属性,是workflow名称 # 4. para 【有用】对应相应任务的para属性,是mapping参数文件名称 # 5. exppara 【有用】对应相应任务的exppara属性,是informatica的环境信息、必须按照顺序: # 【服务,域,用户,密码,workflow所在知识库文件夹】,字段间用逗号隔开。 # 6. hostuser 【无用】远程主机用户链接信息。远程主机用户链接信息对应作业的hostuser属性 # # (三) 返回值: 0 成功;1 失败 # # 流程模式代码任务定义举例: # <infajob> # <name>MainModul_Infa_Workflow_1</name> # <progname>Infa_Workflow_1</progname> # <para>***/mapping0.file</para> -- ***为mapping文件的位置 # <exppara>etl_svr_1,domain_1,user_1,pwd_1,folder_1</exppara> # </infajob> # # 它最终会拼接执行命令执行 pmcmd startworkflow -sv etl_svr_1 -d domain_1 -u user_1 -p pwd_1 -folder folder_1 -paramfile ***/mapping0.file -wait Infa_Workflow_1 # #------------------------------------------------------------------------------ if [ $# -ne 6 ] then echo "Param error !" echo "Usage: $0 tccid jobid progname para expara hostuser" exit 126 fi #------------------------------------------------------------------------------ # 第一步: 接收参数 #------------------------------------------------------------------------------ ProgName=$3 Para=$4 ExpPara=$5 #------------------------------------------------------------------------------ # 第二步: 解析环境参数,分别获取【服务,域,用户,密码,workflow所在知识库文件夹】 #------------------------------------------------------------------------------ # 服务名 并去前后空格 tmpstr=`echo ${ExpPara}|awk -F ',' '{print $1}'` SERVER=`echo ${tmpstr}` # 域 并去前后空格 tmpstr=`echo ${ExpPara}|awk -F ',' '{print $2}'` DOMAIN=`echo ${tmpstr}` # 用户 并去前后空格 tmpstr=`echo ${ExpPara}|awk -F ',' '{print $3}'` USER=`echo ${tmpstr}` # 密码 并去前后空格 tmpstr=`echo ${ExpPara}|awk -F ',' '{print $4}'` PWD=`echo ${tmpstr}` # workflow所在知识库文件夹 并去前后空格 tmpstr=`echo ${ExpPara}|awk -F ',' '{print $5}'` FOLDER=`echo ${tmpstr}` #------------------------------------------------------------------------------ # 第三步: 启动workflow,执行时应判断参数是否为空 #------------------------------------------------------------------------------ if [ -z ${Para} ];then echo `pmcmd startworkflow -sv ${SERVER} -d ${DOMAIN} -u ${USER} -p ${PWD} -folder ${FOLDER} -wait ${ProgName}` else echo `pmcmd startworkflow -sv ${SERVER} -d ${DOMAIN} -u ${USER} -p ${PWD} -paramfile ${Para} -folder ${FOLDER} -wait ${ProgName}` fi #------------------------------------------------------------------------------ # 第四步: 获取informatica处理日志,并分析处理结果 #------------------------------------------------------------------------------ echo "JOB运行日志如下........................." echo "================================================================================" if [ -f "$TASKCTLDIR/tmp/${ProgName}.log" ]; then rm -f "$TASKCTLDIR/tmp/${ProgName}.log" fi echo `pmcmd getworkflowdetails -sv ${SERVER} -d ${DOMAIN} -u ${USER} -p ${PWD} -folder ${FOLDER} ${ProgName} > $TASKCTLDIR/tmp/${ProgName}.log` typeset status=`sed -n '/Workflow run status/'p $TASKCTLDIR/tmp/${ProgName}.log | awk '{print$4}'` #------------------------------------------------------------------------------ # 第五步: 插件返回 #------------------------------------------------------------------------------ echo "================================================================================" if [ "$status" != "[Succeeded]" ] then echo "" echo "Run job failed !" exit 1; else echo "" echo "Run job success !" exit 0; fi
2、在桌面软件admin中进入"任务类型"功能中,新增作业类型
作业类型名称 :infajob (决定在Designer、Monitor等使用是类型,不一定叫infajob)
执行方式 因为我们是shell 然后执行程序 为上述新增的脚本 $TASKCTLDIR/src/plugin/informatica/shell/cpruninfajob.sh,如下图所示:
3、在桌面软件 Designer 中节点工具箱即可看到新增 infajob 作业类型;
同时参照执行插件中的配置方式,设计 infajob 作业如下代码片段:(以实际情况为准)
<infajob> <name>MainModul_Infa_Workflow_1</name> <progname>Infa_Workflow_1</progname> <para>***/mapping0.file</para> <exppara>etl_svr_1,domain_1,user_1,pwd_1,folder_1</exppara> </infajob>
保存 并 编译流程,如果成功,则可以选中作业 右键 ,进行单作业验证调试,如果没有通过根据提示调整执行插件,直到成功为止 。就可以正式使用 infajob 作业类型了
[最后编辑于 2020-08-25 13:41 ]
请登录后评论~