特定のポートに対して実行中のプロセスIDを取得しようとしているので、正常に実行されたコマンドを手動で実行してください。
lsof -i :9090 -t
ただし、Jenkinsパイプラインのシェルスクリプトを介して同じコンピュータで同じコードを実行すると、エラーが発生します。lsof: command not found
以下はJenkinsパイプラインのコードです。
def stopServer() {
script {
echo "Stopping server"
sh '''var=\$(lsof -i :9090 -t)
kill -TERM \$var
'''
}
}
同じコマンドが同じマシンの端末で実行される可能性があるが、Jenkinsパイプラインのシェルスクリプトでは実行できない理由を理解するのに役立ちます。
ベストアンサー1
lsof
これは、そのディレクトリが「PATH」環境変数にリストされていないためです。jenkins
解決策は次のとおりです。
- JenkinsのPATHが正しく設定されていることを確認してください。または
lsof
defにフルパス名を指定してくださいstopServer
。
ただし、lsof -i :9090 -t
ローカルサーバープロセスのPIDのみをリストしないでください。聞くポート9090には、ネットワーク上のコンピュータのポート9090に接続されているクライアントプロセスのPIDも一覧表示されます。
を使用したい場合がありますnetstat -tpln
。例えば
netstat -tpln | awk -F'[[:space:]/:]+' '$5 == 9090 {print $(NF-2)}'