在 Jenkins 管道中执行 shell 脚本期间未找到 lsof 命令

在 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 脚本运行。

答案1

这是因为不在' PATH 环境变量lsof中列出的目录中。jenkins

解决方案是:

  1. 确保 jenkins 内的 PATH 设置正确或者
  2. lsof在 def 中指定完整路径名stopServer

顺便说一句,lsof -i :9090 -t不只是列出本地服务器进程的 PID聆听在端口 9090 上,它还列出了连接到网络上任何计算机的端口 9090 的任何客户端进程的 PID。

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

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

相关内容