私は Tomcat をシャットダウンするための簡単な bash スクリプトを書いています。正常に停止しない場合は、Tomcat の PID がまだ存在するかどうかを確認し、それを強制終了します。
以下のように、スクリプトに変数としてTomcat名を渡します。いくつかの例では、2つまたは3つのTomcat名を渡します。そのため、以下のFOR LOOPを使用します。
./shutdown.sh tomcat1
Shutdown.sh スクリプトの内容
#!/bin/bash
for name in "$@"
do
bash /opt/$name/bin/shutdown.sh
done
sleep 30
for name in "$@"
do
process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`
if [ $process_id ]
then
kill -9 $process_id
fi
done
echo " Script Execution completed"
Tomcat が正常にシャットダウンすると、問題はありません。しかし、Tomcat が停止しない場合は、問題が発生します。
以下のコードをコマンド プロンプトで直接実行すると、Tomcat の正しいプロセス ID (62457) が返されます。ただし、シェル スクリプト内の同じコードでは、3 つのプロセス ID (62610、62611、62457) が返されます。
process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`
スクリプトでプロセス ID が 1 つではなく 3 つ取得される理由を教えていただけますか?
他にもっと簡単に殺せる提案はありますか?