Shell-Script
在 Jenkins 管道中執行 shell 腳本期間找不到 lsof 命令
我正在嘗試獲取針對特定埠執行的程序 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
不在jenkins
PATH 環境變數中列出的目錄中。解決方案是:
- 確保 PATH 在 jenkins 中正確設置或
lsof
在你的定義中指定完整的路徑名stopServer
。順便說一句,
lsof -i :9090 -t
不僅列出了偵聽埠 9090 的本地伺服器程序的 PID,它還列出了連接到網路上任何機器的埠 9090 的任何客戶端程序的 PID。您可能想
netstat -tpln
改用。例如netstat -tpln | awk -F'[[:space:]/:]+' '$5 == 9090 {print $(NF-2)}'