4

シェルスクリプトを使用して、Tomcatがシステムで実行されているかどうかを確認する必要があります。そうでない場合は、プロセスIDをキャッチしてTomcatを強制終了する必要があります。それはどのように達成されますか?

4

4 に答える 4

11

実行中のプロセスを取得するために、次のコマンドを使用しました。

ps x | grep [full_path_to_tomcat] | grep -v grep | cut -d ' ' -f 1

ただし、注意する必要があります。私のセットアップでは動作しますが、どこでも実行できない場合があります...tomcatのインストールは2つあります。1つはポート8080の/usr / local / tomcatで、もう1つはポート8081の/ usr / local/tomcat_8081です。'/を使用する必要があります。 usr / local / tomcat /'(最後のスラッシュを含む)をfull_pathとして使用します。そうしないと、tomcat_8081も実行されている場合に2つの異なるpidが返されるためです。

このコマンドの機能の説明は次のとおりです。

1)ps xpid、tty、stat、実行時間、コマンドの順に実行中のプロセスのリストを表示します。

2)grep [full_path_to_tomcat]それに適用すると、そのリスト内にパターン[full_path_to_tomcat]が見つかります。たとえば、実行ps x | grep /usr/local/tomcat/すると次のようになります。

13277 ?        Sl     7:13 /usr/local/java/bin/java -Djava.util.logging.config.fil
e=/usr/local/tomcat/conf/logging.properties [...] -Dcatalina.home=/usr/local/tomca
t [...]
21149 pts/0    S+     0:00 grep /usr/local/tomcat/

3)grep /usr/local/tomcat/パターンが一致しているため、1つではなく2つのエントリを取得したので、それを削除しましょう。-vgrepの反転一致フラグです。これは、パターンに一致しない行のみを選択することを意味します。したがって、前の例では、を使用すると次のps -x | grep /usr/local/tomcat/ | grep -v grepようになります。

13277 ?        Sl     7:13 /usr/local/java/bin/java -Djava.util.logging.config.fil
e=/usr/local/tomcat/conf/logging.properties [...] -Dcatalina.home=/usr/local/tomca
t [...]

4)かっこいい、これで必要なpidができました。それでも、残りをすべて取り除く必要があります。そのために、を使用してみましょうcut。このコマンドは、ファイルまたは標準出力からセクションを削除します。-dオプションは区切り文字であり、-fは必要なフィールドです。素晴らしい。したがって、スペース('')を区切り文字として使用し、pidに対応する最初のフィールドを取得できます。実行ps x | grep /usr/local/tomcat/ | grep -v grep | cut -d ' ' -f 1すると戻ります:

13277

どちらが必要ですか。スクリプトで使用するには、次のようにします。

#replace below with your tomcat path
tomcat_path=/users/tomcat/apache-tomcat-8.0.30
pid=$(ps x | grep "${tomcat_path}" | grep -v grep | cut -d ' ' -f 1)
if [ "${pid}" ]; then
  eval "kill ${pid}"
fi
于 2013-04-15T20:29:40.260 に答える
4

サーバーアドレスにwgetを使用し、ステータスを確認する1つの方法。

こちらのリンクを確認してください:

http://www.velvettools.com/2013/07/shell-script-to-check-tomcat-status-and.html#.VX_jfVz-X1E

TOMCAT_HOME=/usr/local/tomcat-folder/

is_Running ()
{

        wget -O - http://yourserver.com/ >& /dev/null
 if( test $? -eq 0 ) then
  return 0
 else
  return 1
 fi
}



stop_Tomcat ()
{
 echo "shutting down......"
 $TOMCAT_HOME/bin/shutdown.sh
}

start_Tomcat ()
{
 echo "starting......"
 $TOMCAT_HOME/bin/startup.sh
}

restart ()
{
 stop_Tomcat
 sleep 10
 kill_Hanged_Processes
 start_Tomcat
 sleep 60
}
于 2015-06-18T09:51:03.433 に答える
2

それを行う簡単な方法は次のとおりです。

 ps -ef | grep tomcat

このコマンドを使用すると、次のようになります。

user [id-to-kill] Date [tomcat-path]

最後のステップはプロセスを強制終了することです

sudo kill -9 [id-to-kill]

おめでとうございます、あなたのプロセスは殺されました

于 2013-10-09T08:45:40.873 に答える
1

Tomcatのデフォルトポートは8080です。uはそれをgrepして、比較ループでポートステータスを使用できます。

#!/bin/bash
STAT=`netstat -na | grep 8080 | awk '{print $7}'`
if [ "$STAT" = "LISTEN" ]; then
    echo "DEFAULT TOMCAT PORT IS LISTENING, SO ITS OK"
elif [ "$STAT" = "" ]; then 
    echo "8080 PORT IS NOT IN USE SO TOMCAT IS NOT WORKING"
    ## only if you defined CATALINA_HOME in JAVA ENV ##
    cd $CATALINA_HOME/bin
    ./startup.sh
fi
RESULT=`netstat -na | grep 8080 | awk '{print $7}' | wc -l`
if [ "$RESULT" = 0 ]; then
    echo "TOMCAT PORT STILL NOT LISTENING"
elif [ "$RESULT" != 0 ]; then
    echo "TOMCAT PORT IS LISTENINS AND SO TOMCAT WORKING"
fi

このようにして、tomcatのデフォルトポートを使用している場合はscript.you grepポート8080を比較できます。これは、tomcatが実行されているかどうかのみをチェックします。次に、ポートlsof -i:8080を使用してプロセスを確認できます。//ポート8080を使用している場合

それを使用してプロセスを強制終了してポートを解放する場合は、このコマンドを使用しますkill 75782 //たとえば、75782がポートを使用するプロセスである場合

于 2012-08-10T09:39:30.143 に答える