本帖最后由 童話鎮(zhèn) 于 2017-10-26 10:02 編輯
使用TASKCTL調(diào)度服務(wù)時,如果需要跨用戶或者跨服務(wù)器調(diào)度可以通過安裝taskctl的代理來實(shí)現(xiàn),但有時需要執(zhí)行作業(yè)的服務(wù)器上僅僅只有幾個腳本,此時再部署代理,就顯得有點(diǎn)得不償失了。我們知道TASKCTL支持任意作業(yè)類型的擴(kuò)展,所以我們是不是可以考慮通過SSH遠(yuǎn)程連接來執(zhí)行這些少量的腳本程序。 下面是通過擴(kuò)展TASKCTL用ssh連接來支持調(diào)度遠(yuǎn)程作業(yè)的步驟,一方面解決一些朋友迫切的調(diào)度需求,另一方面拋磚引玉,讓大家能夠在TASKCTL中擴(kuò)展更多的適應(yīng)自己需求的作業(yè)插件。 1、首先在服務(wù)端的$TASKCTLDIR/src/plugin/ssh/shell/目錄中新增cprunssh.sh作業(yè)插件,實(shí)際上就是一個shell程序,代碼如下: - #!/bin/sh
- #------------------------------------------------------------------------------
- # 功能: ssh方式執(zhí)行 遠(yuǎn)程腳本 驅(qū)動插件程序
- # 參數(shù):
- # 1. progname 和sh作業(yè)類似,對應(yīng)相應(yīng)任務(wù)的progname屬性,一般為腳本的全路徑名稱
- # 2. para 和sh作業(yè)類似,對應(yīng)相應(yīng)任務(wù)的para屬性,一般為腳本的入口參數(shù),格式為 para1 para2 ...
- # 3. exppara 對應(yīng)相應(yīng)任務(wù)的exppara屬性,一般為腳本文件所在位置,在這里是遠(yuǎn)程連接IP地址和用戶名
- # sip=172.22.1.1 ssh遠(yuǎn)程IP地址
- # sport=9527 ssh遠(yuǎn)程連接端口
- # suser=taskctl ssh遠(yuǎn)程用戶
- # 返回值: 0 成功;1 失敗
- #
- # 流程模式代碼任務(wù)定義舉例:
- # 默認(rèn)2個輸入?yún)?shù)的遠(yuǎn)程服務(wù)器上的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
- #------------------------------------------------------------------------------
- # 第一步: 接收參數(shù)
- #------------------------------------------------------------------------------
- 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` #此處為了去前后空格,以便判斷是否真正有入口參數(shù)
- sip=`getValue $ExpPara sip`
- #sport=`getValue $ExpPara sport` #默認(rèn)沒有修改端口 傳參數(shù)的時候也沒有傳 先屏蔽
- 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
- #------------------------------------------------------------------------------
- # 第四步: 運(yùn)行JOB,并等待結(jié)果
- #------------------------------------------------------------------------------
- #echo "ssh -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -p $sport $suser@$sip sh $ProgName $Para" #此處為打印執(zhí)行命令行,以便調(diào)試判斷是否真正有入口參數(shù)
- 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
復(fù)制代碼
2、在桌面軟件admin中進(jìn)入"任務(wù)類型"功能中,設(shè)置ssh作業(yè)類型,如下圖所示: 3、在桌面軟件designer中設(shè)計 ssh 作業(yè)如下代碼片段: - <!-- 按插件的規(guī)則編寫的流程設(shè)置 -->
- <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作業(yè)</jobdesc>
- </ssh>
復(fù)制代碼
4、調(diào)試測試作業(yè)是否符合預(yù)期
|