TASKCTL中扩展mysql存储过程作业类型

浏览: 2250

         我们都知道TASKCTL支持任意作业类型的扩展,但目前TASKCTL 4.1.3版本中并没有内置mysql存储过程的作业插件。通过介绍使TASKCTL支持调度mysql存储过程作业类型的步骤,一方面解决一些朋友迫切的mysql存储过程调度需求,另一方面抛砖引玉,让大家能够在TASKCTL中扩展更多的适应自己需求的作业插件。

1、在$TASKCTLDIR/src/plugin/mysqlproc/shell/目录中新增cprunmysqlproc.sh作业插件,实际上就是一个shell程序,代码如下:

#!/bin/sh


if [ $# -ne 3 ]
then
echo "Param error !"
echo "Usage: $0 progname para expara"
exit 126
fi



#------------------------------------------------------------------------------
# 第一步: 接收参数
#------------------------------------------------------------------------------
ProgName=$1
Para=`echo $2` #此处为了去前后空格,以便判断是否真正有入口参数
ExpPara=$3

#------------------------------------------------------------------------------
# 第二步: 解析exppara,分别获取数据库HOST,数据库名称、用户、密码等信息
#------------------------------------------------------------------------------

# 数据库名 并去前后空格
tmpstr=`echo ${ExpPara}|awk -F ',' '{print $1}'`
DBHOST=`echo ${tmpstr}`


# 数据库名 并去前后空格
tmpstr=`echo ${ExpPara}|awk -F ',' '{print $2}'`
DBNAME=`echo ${tmpstr}`


# 数据库用户 并去前后空格
tmpstr=`echo ${ExpPara}|awk -F ',' '{print $3}'`
DBUSER=`echo ${tmpstr}`


# 数据库密码 并去前后空格
tmpstr=`echo ${ExpPara}|awk -F ',' '{print $4}'`
DBPASSWD=`echo ${tmpstr}`

#------------------------------------------------------------------------------
# 第三步: 执行存储过程
#------------------------------------------------------------------------------
sqlstr=`mysql -h${DBHOST} -u${DBUSER} -p${DBPASSWD} <<EOF 2>&1
call ${DBNAME}.${ProgName}('${Para}',@retcode,@retmsg);
select '\r';
select @retcode;
select @retmsg;
quit
EOF`

#------------------------------------------------------------------------------
# 第四步: 插件返回
#------------------------------------------------------------------------------

echo "================================================================================"

result=`echo $sqlstr |awk '{print $3,$5}'`
out=`echo $result |awk '{print $1}'`
CMSG=`echo $result |awk '{print $2}'`
echo ${CMSG}
echo ""
if [ $out -eq 0 ]
then
exit 0
else
exit 1
fi


2、在桌面软件admin中进入"任务类型"功能中,设置mysqlproc作业类型,如下图所示:

QQ图片20160414171006.png

3、在桌面软件designer中设计mysqlproc作业如下代码片段:

  <!-- 按照插件程序的要求,para属性中设置一个输入参数,exppara属性中设置 主机名,数据库名,用户名,用户密码,用逗号隔开-->  
<mysqlproc>
<name>MainModul_JobNode0</name>
<progname>proc_taskctl</progname>
<para>$(mysql_in_param1)</para>
<exppara>$(mysqlhost),$(mysqldbname),$(mysqluser),$(mysqlpwd)</exppara>
</mysqlproc>


4、附mysql存储过程程序 proc_taskctl 示例代码:

CREATE PROCEDURE `proc_taskctl`(IN msg VARCHAR(20),OUT retcode int,OUT retmsg varchar(255))
BEGIN
SET retmsg = concat('hello:',msg);
SET retcode = 0;
END
推荐 0
本文由 taskctl 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

3 个评论

mysql> desc tb2;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| msg | varchar(20) | YES | | NULL | |
| retcode | int(10) | YES | | NULL | |
| retmsg | varchar(255) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
3 rows in set (0.03 sec)
表结构是以上字段,为什么那个存储过程不能执行
<para>$(mysql_in_param1)</para>这个值代表什么
param error !
Usage: /root/task/src/plugin/db2proc/shell/cprundb2proc.sh progname para expara
报这个错是什么情况
我的流程是这样的
begin---mysqlproc---end
存储过程
DELIMITER //
CREATE PROCEDURE `qq`()
BEGIN
select * from tb2;
END
//
DELIMITER ;
作业类型下的sh和你的一样
designer中设计mysqlproc作业也是和你的一样,这个怎么弄

要回复文章请先登录注册