web-dev-qa-db-ja.com

スーパーバイザーによるTomcatの制御

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

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

誰かがtomcatでスーパーバイザーをうまく使用できましたか?

また、Tomcatのstartup.shスクリプトがJavaプロセスを開始するため、結果のJavaコマンドを直接スーパーバイザにコピーしていますが、これはすべての環境設定のため、startup.shスクリプトを使用するのと同じです。startup.shスクリプトをスーパーバイザに使用させる方法はありますが、結果の子Javaプロセスを追跡する方法はありますか?

14
Mark

そのスクリプトへのリンクを提供してくれた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

実行すると、次のようになります。

[[email protected]:~]# supervisorctl start Tomcat
tomcat: started
[[email protected]:~]# supervisorctl status
Tomcat                           RUNNING    pid 9611, uptime 0:00:03
[[email protected]:~]# 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で問題が発生しました。それをラッパースクリプトに入れることでそれが処理されました。

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

6
Aaron R.

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を持ち、シグナルを受け入れます。スーパーバイザーと完全にうまく動作します。

20
Sergey Kozlov

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

使用してみましたか 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
0
quanta