スーパーバイザーでTomcatを制御する


14

スーパーバイザー経由で制御するときにTomcatを「正常に」シャットダウンする方法はありますか?

私の理解では、Tomcatのshutdown.shスクリプトはシャットダウンポート上のtomcatと通信して正常なシャットダウンを開始します。スーパーバイザーには、信号のみを使用してシャットダウン「コマンド」を指定する方法はないようです。

誰かがTomcatでスーパーバイザーを正常に使用しましたか?

また、tomcatのstartup.shスクリプトはjavaプロセスを開始するため、結果のjavaコマンドを直接スーパバイザにコピーしてきましたが、これはすべての環境設定のためstartup.shスクリプトを使用するほど良くありません。スーパーバイザーにstartup.shスクリプトを使用させながら、結果の子Javaプロセスを追跡する方法はありますか?

回答:


6

そのスクリプトへのリンクを提供してくれたMarkに感謝します。これがCentOSの私の実例です:

#!/bin/bash
# Source: https://confluence.atlassian.com/plugins/viewsource/viewpagesrc.action?pageId=252348917
function shutdown()
{
    date
    echo "Shutting down Tomcat"
    unset CATALINA_PID # Necessary in some cases
    unset LD_LIBRARY_PATH # Necessary in some cases
    unset JAVA_OPTS # Necessary in some cases

    $TOMCAT_HOME/bin/catalina.sh stop
}

date
echo "Starting Tomcat"
export CATALINA_PID=/tmp/$$
export JAVA_HOME=/usr/local/java
export LD_LIBRARY_PATH=/usr/local/apr/lib
export JAVA_OPTS="-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.password.file=/etc/tomcat.jmx.pwd -Dcom.sun.management.jmxremote.access.file=/etc/tomcat.jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Xms128m -Xmx3072m -XX:MaxPermSize=256m"

# Uncomment to increase Tomcat's maximum heap allocation
# export JAVA_OPTS=-Xmx512M $JAVA_OPTS

. $TOMCAT_HOME/bin/catalina.sh start

# Allow any signal which would kill a process to stop Tomcat
trap shutdown HUP INT QUIT ABRT KILL ALRM TERM TSTP

echo "Waiting for `cat $CATALINA_PID`"
wait `cat $CATALINA_PID`

そして、これが/etc/supervisord.confで使用したものです。

[program:tomcat]
directory=/usr/local/tomcat
command=/usr/local/tomcat/bin/supervisord_wrapper.sh
stdout_logfile=syslog
stderr_logfile=syslog
user=apache

実行中は、次のようになります。

[root@qa1.qa:~]# supervisorctl start tomcat
tomcat: started
[root@qa1.qa:~]# supervisorctl status
tomcat                           RUNNING    pid 9611, uptime 0:00:03
[root@qa1.qa:~]# ps -ef|grep t[o]mcat
apache    9611  9581  0 13:09 ?        00:00:00 /bin/bash /usr/local/tomcat/bin/supervisord_wrapper.sh start
apache    9623  9611 99 13:09 ?        00:00:10 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.password.file=/etc/tomcat.jmx.pwd -Dcom.sun.management.jmxremote.access.file=/etc/tomcat.jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Xms128m -Xmx3072m -XX:MaxPermSize=256m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

私は最初にenvironmentディレクティブを介してこれらの環境変数を/etc/supervisord.confに追加しようとしましたが、すべてのスペースと等号を使用して、JAVA_OPTSで問題が発生しました。それをラッパースクリプトに入れることで処理されました。

これが誰かの時間を節約するのに役立つことを願っています!


1
これは、CentOS 6のスーパーバイザーv3.0のTomcat 7で動作することを確認できますstart。/etc/supervisord.confのコマンドの最後では、スクリプトは何もしないため、不要な引数であることに注意してください。
リックハンロンII 14年

あ、キャッチしてくれてありがとう!以前はcatalina.shに渡していました。削除しました。
アーロンR. 14

20

catalina.shには「実行」コマンドがあります。スーパーバイザーと完全に連携します:

[program:tomcat]
command=/path/to/tomcat/bin/catalina.sh run
process_name=%(program_name)s
startsecs=5
stopsignal=INT
user=tomcat
redirect_stderr=true
stdout_logfile=/var/log/tomcat.log

「catalina.sh run」として実行されるTomcatは、フォアグラウンドで動作し、正しいpidを持ち、シグナルを受け入れます。スーパーバイザーで完全に動作します。


1
これは受け入れられた答えであるべきです。
MaratC

「サーバーを起動できません。サーバーインスタンスが構成されていません」と表示されます
-xtian

0

スーパーバイザーには、信号のみを使用してシャットダウン「コマンド」を指定する方法はないようです。

使用しようとしましたstopsignal=QUITか?

[program:tomcat]
command=java ...
process_name=tomcat
priority=150
startsecs=10
directory=./
stopsignal=QUIT
stdout_logfile=./logs/tomcat.log
stderr_logfile=./logs/tomcat.err

QUITがtomcatにcatalina.outログ(別名コンソール)へのスレッドダンプを行わせるように見えます。
マーク

1
:これは興味深い提案ですconfluence.atlassian.com/plugins/viewsource/... ...基本的にスクリプトでcatalina.shをラップし、シャットダウンのためのトラップ機能をインストールする-
マーク・

@MarkこれはOSXでの起動用ですが、どのようにスーパーバイザーに適合させることができますか?
コンラッドディーン

1
@ Conrad.Deanスーパーバイザーは同じ仮定を使用します。同じスクリプトは、変更なしでスーパーバイザーに対して機能します
マーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.