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

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

UE3脚本UnrealScript UC语法点滴

持续更新 目录 类定义修饰符  1.dependson(CLASSNAME) 2.config(ININAME) 3.native 4.notplaceable 5.inherits(CLASSNAME1[,CLASSNAME2,...]) 类对象实例创建 类默认属性设置 变量 1.声明 var local 2.修饰符 config  3.array 类型变量 以及

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是