Shell-Script

在 Jenkins 管道中執行 shell 腳本期間找不到 lsof 命令

  • July 14, 2021

我正在嘗試獲取針對特定埠執行的程序 ID,因此手動執行以下命令 -

lsof -i :9090 -t

但是,如果我通過 Jenkins 管道的 shell 腳本在同一台機器上執行相同的程式碼,則會導致錯誤 -lsof: command not found

以下是來自 Jenkins 管道的程式碼 -

def stopServer() {
   script {
       echo "Stopping server"
       sh '''var=\$(lsof -i :9090 -t)
         kill -TERM \$var
         '''
   }
}

請幫助理解為什麼相同的命令在同一台機器的終端上工作,而不是來自 Jenkins 管道的 shell 腳本。

這將是因為lsof不在jenkinsPATH 環境變數中列出的目錄中。

解決方案是:

  1. 確保 PATH 在 jenkins 中正確設置
  2. lsof在你的定義中指定完整的路徑名stopServer

順便說一句,lsof -i :9090 -t不僅列出了偵聽埠 9090 的本地伺服器程序的 PID,它還列出了連接到網路上任何機器的埠 9090 的任何客戶端程序的 PID。

您可能想netstat -tpln改用。例如

netstat -tpln | awk -F'[[:space:]/:]+' '$5 == 9090 {print $(NF-2)}'

引用自:https://unix.stackexchange.com/questions/658309