これは、なにをしたくて書いたもの?
Apache Tomcatをフォアグラウンドで起動する方法について、ちょっとメモしておこうかなと。
Dockerコンテナやsystemdのサービスとして起動する時に、知っておくと便利そうですよね。
前に書いたエントリーで触れたことがあったのですが、その時は別のテーマにフォーカスしたので、独立して、と。
結論を書くと、catalina.sh run
で実行すればOKです。
環境
今回の環境は、こちら。
$ java --version openjdk 17.0.2 2022-01-18 OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04) OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)
$ curl -LO https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.18/bin/apache-tomcat-10.0.18.tar.gz $ tar xf apache-tomcat-10.0.18.tar.gz $ cd apache-tomcat-10.0.18
startup.shとshutdown.sh
Apache Tomcatでよく使うスクリプトといえば、startup.sh
とshutdown.sh
です。
この中を見ると、実体はcatalina.sh
であることがわかります。
startup.sh
。
$ tail -n 19 bin/startup.sh EXECUTABLE=catalina.sh # Check that target executable exists if $os400; then # -x will Only work on the os400 if the files are: # 1. owned by the user # 2. owned by the PRIMARY group of the user # this will not work if the user belongs in secondary groups eval else if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then echo "Cannot find $PRGDIR/$EXECUTABLE" echo "The file is absent or does not have execute permission" echo "This file is needed to run this program" exit 1 fi fi exec "$PRGDIR"/"$EXECUTABLE" start "$@"
shutdown.sh
。
$ tail -n 19 bin/shutdown.sh EXECUTABLE=catalina.sh # Check that target executable exists if $os400; then # -x will Only work on the os400 if the files are: # 1. owned by the user # 2. owned by the PRIMARY group of the user # this will not work if the user belongs in secondary groups eval else if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then echo "Cannot find $PRGDIR/$EXECUTABLE" echo "The file is absent or does not have execute permission" echo "This file is needed to run this program" exit 1 fi fi exec "$PRGDIR"/"$EXECUTABLE" stop "$@"
それぞれ、catalina.sh
のstart
とstop
が呼び出されています。
catalina.sh
ここでcatalina.sh
に書かれているコメントを見てみます。
# For supported commands call "catalina.sh help" or see the usage section at # the end of this file.
help
でヘルプが見れそうなので、表示。
$ bin/catalina.sh help Using CATALINA_BASE: /path/to/apache-tomcat-10.0.18 Using CATALINA_HOME: /path/to/apache-tomcat-10.0.18 Using CATALINA_TMPDIR: /path/to/apache-tomcat-10.0.18/temp Using JRE_HOME: /usr/lib/jvm/default Using CLASSPATH: /path/to/apache-tomcat-10.0.18/bin/bootstrap.jar:/path/to/apache-tomcat-10.0.18/bin/tomcat-juli.jar Using CATALINA_OPTS: Usage: catalina.sh ( commands ... ) commands: debug Start Catalina in a debugger debug -security Debug Catalina with a security manager jpda start Start Catalina under JPDA debugger run Start Catalina in the current window run -security Start in the current window with security manager start Start Catalina in a separate window start -security Start in a separate window with security manager stop Stop Catalina, waiting up to 5 seconds for the process to end stop n Stop Catalina, waiting up to n seconds for the process to end stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running configtest Run a basic syntax check on server.xml - check exit code for result version What version of tomcat are you running? Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined
start
は"separate window"で、バックグラウンドにいくわけですね。run
は"current window"なのでこちらはフォアグラウンドのようです。
というわけで、実行。
$ bin/catalina.sh run
15-Mar-2022 22:47:30.098 情報 [main] org.apache.coyote.AbstractProtocol.start プロトコルハンドラー ["http-nio-8080"] を開始しました。 15-Mar-2022 22:47:30.147 情報 [main] org.apache.catalina.startup.Catalina.start サーバーの起動 [1015]ms
停止する場合は、Ctrl-cということになります。
ログは、そのままだとcatalina.out
以外は出力されます。
$ ll logs 合計 20 drwxr-x--- 2 xxxxx xxxxx 4096 3月 15 22:47 ./ drwxrwxr-x 9 xxxxx xxxxx 4096 3月 15 22:42 ../ -rw-r----- 1 xxxxx xxxxx 7909 3月 15 22:47 catalina.2022-03-15.log -rw-r----- 1 xxxxx xxxxx 414 3月 15 22:47 localhost.2022-03-15.log -rw-r----- 1 xxxxx xxxxx 0 3月 15 22:47 localhost_access_log.2022-03-15.txt
このあたりの動作を変更したかったら、Apache Tomcatのログ設定を変更、というところでしょうね。
ちょっとしたメモでした。