TASKCTL中不使用代理,通过ssh免密连接执行远程脚本配置(SSH插件扩展)

本文主要是介绍TASKCTL中不使用代理,通过ssh免密连接执行远程脚本配置(SSH插件扩展),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 使用TASKCTL调度服务时,如果需要跨用户或者跨服务器调度可以通过安装taskctl的代理来实现,但有时需要执行作业的服务器上仅仅只有几个脚本,此时再部署代理,就显得有点得不偿失了。我们知道TASKCTL支持任意作业类型的扩展,所以我们是不是可以考虑通过SSH远程连接来执行这些少量的脚本程序。

    下面是通过扩展TASKCTL用ssh连接来支持调度远程作业的步骤,一方面解决一些朋友迫切的调度需求,另一方面抛砖引玉,让大家能够在TASKCTL中扩展更多的适应自己需求的作业插件。

    下面编写的过程参照 http://www.taskctl.com/forum/detail_33.html 。

    1、首先在服务端的$TASKCTLDIR/src/plugin/ssh/shell/目录中新增cprunssh.sh作业插件,实际上就是一个shell程序,代码如下:

#!/bin/sh
#------------------------------------------------------------------------------
# 功能: ssh方式执行 远程脚本 驱动插件程序
# 参数: 
# 1. progname 和sh作业类似,对应相应任务的progname属性,一般为脚本的全路径名称
# 2. para 和sh作业类似,对应相应任务的para属性,一般为脚本的入口参数,格式为 para1 para2 ...
# 3. exppara 对应相应任务的exppara属性,一般为脚本文件所在位置,在这里是远程连接IP地址和用户名
# sip=172.22.1.1 ssh远程IP地址
# sport=9527 ssh远程连接端口
# suser=taskctl ssh远程用户
# 返回值: 0 成功;1 失败
#
# 流程模式代码任务定义举例:
# 默认2个输入参数的远程服务器上的sh脚本(如果多个,以此类推)
# <ssh>
# <name>job1</name>
# <progname>/home/username/test.sh</progname> 
# <para>para1 para2</para>
# <exppara>sip=172.22.1.1,[sport=22,]suser=taskctl</exppara>
# </ssh>

#------------------------------------------------------------------------------

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

#------------------------------------------------------------------------------
# 第一步: 接收参数
#------------------------------------------------------------------------------ 
ProgName=$1
Para=$2
ExpPara=$3

#------------------------------------------------------------------------------
# 第二步: 解析 exppara
#------------------------------------------------------------------------------ 
function getValue(){
if [ $# -ne 2 ] 
then
echo "......."
exit 1
fi

str=`echo $2|awk -v record=$1 'BEGIN {
split(record,myarray,",");

}
END{
for (i in myarray){
if (myarray[i]~$1){
if ( index(myarray[i],$1) == 1){
print myarray[i];
break;
}
}
}
}
'`
echo $str|awk -F"=" '{print $2}'
}

ExpPara=`echo $ExpPara` #此处为了去前后空格,以便判断是否真正有入口参数
sip=`getValue $ExpPara sip`
#sport=`getValue $ExpPara sport` #默认没有修改端口 传参数的时候也没有传 先屏蔽
sport=22
suser=`getValue $ExpPara suser`

#------------------------------------------------------------------------------
# 第三步: 检测是否配置了ssh免密连接
#------------------------------------------------------------------------------
ssh -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -p $sport $suser@$sip 'pwd' &>/dev/null
if [ $? != 0 ];then
echo -e "\n无法连接到$sip"
echo -e "\n可以参照下面的语句尝试配置免密连接"
echo -e "\nssh-keygen -t rsa -P ''"
echo -e "\nssh-copy-id -p $sport $suser@$sip"
exit 1
else
echo -e "\n$sip :ssh connect is OK"
fi

#------------------------------------------------------------------------------
# 第四步: 运行JOB,并等待结果
#------------------------------------------------------------------------------ 
#echo "ssh -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -p $sport $suser@$sip sh $ProgName $Para" #此处为打印执行命令行,以便调试判断是否真正有入口参数
echo "================================================================================"
ssh -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -p $sport $suser@$sip "sh $ProgName $Para"
ret=$?

#------------------------------------------------------------------------------
# 第五步: 插件返回
#------------------------------------------------------------------------------ 
echo "================================================================================"
if [[ $ret == 0 ]]; then
echo "Run job success !"
exit 0
else
echo "Run job failed !" 
exit 1
fi

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

blob.png

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

<!-- 按插件的规则编写的流程设置 -->
<ssh>
<name>MainModul_JobNode0</name>
<progname>/home/cdchen/successjob.sh</progname>
<para>para1 para2</para>
<exppara>sip=47.94.203.124,suser=cdchen</exppara>
<jobdesc>测试ssh作业</jobdesc>
</ssh>

4、调试测试作业是否符合预期

blob.png


这篇关于TASKCTL中不使用代理,通过ssh免密连接执行远程脚本配置(SSH插件扩展)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971423

相关文章

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.