web-dev-qa-db-ja.com

CentOS 6のtomcat6:サービスを停止/再起動できません

Tomcat6(リポジトリーからのパッケージ)の停止と起動にこの問題があります。私はいくつかのCentOS 6およびRHEL 6ボックスで見ました。

症状は、Tomcat6を再起動または停止するときに失敗するだけです。これは、しばらく実行した後にのみ発生しているようです。 CentOS 6を新しくインストールして再起動できましたが、それ以上はできません。

これは私が見るものです:

 # service Tomcat6 restart
 Stopping Tomcat6:                                          [FAILED]
 Starting Tomcat6:                                          [FAILED]

/usr/sbin/Tomcat6を試してみると:

# /usr/sbin/Tomcat6 stop
/usr/sbin/Tomcat6: line 60: /logs/catalina.out: No such file or directory

そして/var/log/Tomcat6/catalina.outからの出力:

Oct 22, 2012 4:53:31 PM org.Apache.catalina.startup.Catalina stopServer
SEVERE: Catalina.stop:
Java.net.ConnectException: Connection refused
    at Java.net.PlainSocketImpl.socketConnect(Native Method)
    at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:327)
    at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:193)
    at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:180)
    at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:384)
    at Java.net.Socket.connect(Socket.Java:546)
    at Java.net.Socket.connect(Socket.Java:495)
    at Java.net.Socket.<init>(Socket.Java:392)
    at Java.net.Socket.<init>(Socket.Java:206)
    at org.Apache.catalina.startup.Catalina.stopServer(Catalina.Java:424)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)

私はネットを検索しましたが、私は一人ではないことがわかりますが、適切な解決策が見つからなかったため、私の質問です。

ところで:私はTomcatにあまり詳しくありません。ああ、最初の投稿!だからニースである;)

6
aairey

問題

標準のTomcatシャットダウンスクリプトの問題は、単純に十分にタフではないことです。ディストリビューションのサービススクリプトを使用してTomcatを停止する場合、最終的にはTomcat独自のシャットダウンスクリプトを呼び出すだけになります。 CentOSはこの点で違いはありません。このため、Tomcatのシャットダウンスクリプトが何をできるか、そして最も重要なことは、何ができるかしないに精通している必要があります。それから遠い。

問題は、Tomcatが管理ポートを介して、またはTERM信号を介しても強制終了できないような状況に陥るのが非常に簡単であることです。

エスカレーションの順序でTomcatを強制終了する方法を確認しましょう。

  1. 管理ポート経由でTomcatを強制終了します。これはデフォルトであり、Tomcat独自のシャットダウンスクリプトが最初に試行するものです。 Javaプロセスが何らかの理由でハングしている場合は機能しません。Tomcatが停止しないと不満を言うインターネット上で見られるすべてのレポートは、多かれ少なかれ常にこれは実際にはTomcatのせいではありません。この方法では、コンテナー全体がハングしたり、停止できなくなったりするWebアプリケーションを簡単に作成できます。

  2. Java process TERMシグナルを送信してTomcatを強制終了します。これは(1)よりもTomcatを強制終了する強力な方法であり、Tomcat独自のシャットダウンスクリプトがこれを試行しますが、その唯一のアクティブ化TomcatでCATALINA_PID変数を設定している場合setenv.sh。(どの場合でも強くお勧めします)TERMシグナルを送信してUnix/Linuxプロセスを強制終了するのはこれは、OSからのkillコマンドのデフォルトです。これは、Unix/Linuxプロセスに終了を指示する丁寧な方法です。残念ながら、これでもまれにTomcatプロセスが強制終了されないことがあります。

  3. Java process a KILL signal。(OS command line from this will kill -9 <pid>)を送信してTomcatを強制終了します。これはalwaysになります。プロセスを強制終了し、最後の手段にする必要があります。ここでの問題は、メソッド(1)および(2)が失敗した場合でも、標準のTomcatシャットダウンスクリプトがこれを試行しないことです。したがって、Tomcatが強制終了されていることを確認したい場合Tomcat独自のシャットダウンスクリプトに独自のラッパースクリプトを実装する以外に選択肢はありません。

本番環境でTomcatを実行している場合は、Tomcatが実行されても死なない(または再起動されない)状況に耐えられるかどうかを本当に考慮する必要があります。 service Tomcat restart。あなたはこれをcron経由で行っているかもしれません、そしてその場合あなたは確かに決定的な結果を期待しますよね?

推奨事項

  • 常にsetenv.shを定義するTomcat CATALINA_PIDファイルを使用します。これにより、少なくとも上記の方法#2が得られます。 Tomcatのsetenv.shファイルはデフォルトでは存在しないため、自分で作成する必要があります。

  • Tomcatが実際に停止することを確実にする、Tomcat独自のスクリプトの周りにラッパースクリプトを作成します。

私が作業している場所では、Tomcatをサービスとして実行するすべてのホストにこれを実装しています。 Unix/Linuxのどのバリアントでも同じ問題/解決策です。

5
unixhacker2010

今日これに遭遇しました。私の場合、原因は古いpidファイルでした。

Tomcatはrm /var/run/Tomcat6.pidを実行した後で問題なく起動しました。

2
Michiel Roos

私は同じ問題に直面しました。私にとって、それはファイルの許可/所有者の問題が原因で起こりました。 init.dまたは/usr/sbin/Tomcat6スクリプトが/etc/Tomcat6/Tomcat6.confファイルを読み取ることができない場合、${CATALINA_BASE}の値は空になります。したがって、60行目の${CATALINA_BASE}/logs/catalina.out/logs/catalina.outになります。

1
Rifat

CentOSでTomcat7を実行しています。以前は、Tomcat6を実行していました。

Tomcatを再起動するには、Tomcatインストールのbinディレクトリに移動し、shutdown.shを実行してから、startup.shを実行するだけです。フォールバックメソッドとしてこのように実行できるはずです。

0
Thorn