Jenkins如何使用Groovy刪除Linux進程

    host = "[email protected]"
    //進程名稱
    process ="/usr/local/tomcat"
   +++++++ 方法一 +++++++
    //進程個數
    result = sh returnStdout: true ,script: "ssh $host \"ps -ef | grep \'$process\' | grep -v grep| wc -l\""
    result = result.trim()
    echo result
    if (result!=null && result.toInteger() > 0){
        echo "kill 進程 "+result+"個!"
        try { 
            sh "ssh $host \'ps -ef | grep \"$process \" | grep -v grep | awk \"{print \$2}\" | xargs kill -9\'"
        } catch(Exception ex) {
            resultTemp = sh returnStdout: true ,script: "ssh $host \"ps -ef | grep \'$process \' | grep -v grep| wc -l\""
            echo "進程kill成功"
            if (resultTemp!=null && resultTemp.toInteger() > 0){
                echo "進程kill失敗"
                ex.printStackTrace()
            }
        }
    }else{
        echo "kill 進程 0個!"
    }
    +++++++方法二+++++++
    killSh = "ps -ef|grep \'$process\' |grep -v grep|awk \'{print \\\$1\\\",\\\"\\\$2}\'|awk -F\',\' \'{print \\\$2}\'|xargs kill -9"
    try { 
        sh "ssh $host \"$killSh\""
        echo "KILL SUCCESS"
    } catch(Exception e1) {
        def msg = e1.getMessage();
        if(msg=="script returned exit code 123"){
            echo "This process does not exist!"
        }else{
            echo "KILL FAILURE!"
        }
    } 

其中需要注意兩個點

  1. ssh遠程操作的時候,ssh userName@local “需要執行的命令,這裏就是普通的字符串”
    例如

    killSh = "ps -ef|grep \'$process\' |grep -v grep|awk \'{print \\\$1\\\",\\\"\\\$2}\'|awk -F\',\' \'{print \\\$2}\'|xargs kill -9"
    

    將字符串拼接好,放入ssh後的雙引號之內就可以了。

  2. Groovy異常的捕獲

    try { 
       //Protected code 
    } catch(ExceptionType1 e1) { 
       e1.getMessage()//異常信息
    } catch(ExceptionType2 e2)  {
      e2.printStackTrace()//拋出異常
    }
    

注:
在linux中請慎重使用標點符號,雙引號中的語句可以直接使用$test這種方式賦值

ssh host “$test...”

當有反斜槓存在的時候,使用${test}這種形式,大括號可以用來區分

ssh host “${path}/test.log”
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章