我们都知道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;
fi2、在桌面软件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 ]
请登录后评论~


