CTRL+C
シェルスクリプトを使用してTomcatアプリケーションサーバーをシャットダウンする動作を複製する必要があります。したがって、次のコードはJenkinsパイプラインスクリプトで書かれています。
sh '''pgrep -fl catalina | awk '{print $1}' | xargs kill -SIGINT'''
しかし、申請を拒否しません。ただし、端末で同じコマンドを実行すると、アプリケーションは閉じます。
pgrep -fl catalina | awk '{print $1}' | xargs kill -SIGINT
シェルスクリプトコードの問題を理解するのに役立ちますか?
ベストアンサー1
これら2つのコマンドは同じではありません。最初のコマンドは、引数を使用してスクリプトを実行しようとしますpgrep -fl catalina | awk {print
(呼び出しシェルが空であると仮定} | xargs kill -SIGINT
)。$1
「該当するファイルまたはディレクトリがありません」エラーが発生します。これは参照のために発生します。
シェルでは、トリプル一重引用符は通常の一重引用符を開始するのに不便な方法です(最初の2つの一重引用符は空の文字列になります)。そして一重引用符文字列できない一重引用符が含まれています。これは{print $1}
コマンドに引用符がないことを意味するため、シェルが展開されてから$1
(何もない場合があります)、末尾のスペースからコマンドを分割しますprint
。
実行中のパイプラインを使用するには、以下をsh
使用しますsh -c
。
sh -c 'sh pgrep -fl catalina | awk "{ print \$1 }" | xargs kill -SIGINT'
または以下を使用してくださいpkill
。
pkill -f -SIGINT catalina
または、あなたはそれを使用することができますTomcatスクリプトshutdown.sh
、またはcatalina.sh stop
、またはservice tomcat stop
。