kuniku’s diary

はてなダイアリーから移行(旧 d.hatena.ne.jp/kuniku/)、表示がおかしな箇所はコメントをお願いします。記載されている内容は日付およびバージョンに注意してください。直近1年以上前は古い情報の可能性が高くなります。

Windows版のtomcatの起動、停止スクリプト(Windowsのサービスは使用しない)

起動、停止を行うバッチファイルの作成

要件として

  • 「.bat」を使いコマンドプロンプトのウィンドウタイトルに、tomcatのバージョン、起動の開始時間を表示する
  • 自前でCATALINA_HOME、CLASSPATHを指定する
  • javaのヒープサイズを指定する
  • GCログを出力する(java8はログローテーション指定可能、java1.4はローテーション指定不可)
  • タイムゾーンtokyoを指定する
  • javaおよびtomcatは、32bit
  • jconsleからjmx接続のための固定ポートを指定する。
その他
  • 「.bat」を使って起動する良いところは
    • 検証中にパラメータを調整しやすい。特にjavaのヒープやGC関係の変更をするには手軽。
    • 起動エラーなど、コンソールが即座に確認できる

注意すべきこと

  • Windowsのサービスの場合は、管理者で実行される。実行するユーザは「SYSTEM」となる。
    • タスクスケジューラから「.bat」を実行する場合は、タスクスケジュールのデフォルトが優先度が「通常」でなく、「通常以下」のため、タスクスケジューラ実行の優先度を変更しておくか、startコマンドで実行させた場合に優先度を指定する。
      • タスクスケジューラ実行で、「最上位の特権で実行する」のチェックをONにしていると、「管理者」権限で実行される。
  • tomcatを実行するユーザに、{CATALINA_HOME}にはフルコントロールの権限を付与しておくこと。
    • 起動時に、内部的にtomcat-users.xmlをリネーム?のような動きをする。
    • {CATALINA_HOME}/logs/にさまざまなファイルを出力するが、「.bat」からの起動、Windowsサービス起動、タスクスケジューラの「最上位の特権で実行」を併用する場合は、ファイルの権限で書き込みできなかったり、移動できなかったり、削除できなかったり

Java8+tomcat8.0.14の起動の場合

@echo off
set TOM_INSTANCE_NAME=Tomcat8-0-14
set TOM_PORT=8080

set _DATE=%DATE%
set _TIME=%TIME: =0%

set WINDOW_TITLE=%COMPUTERNAME%-%TOM_INSTANCE_NAME%:%TOM_PORT% %_DATE%-%_TIME%
set YYYYMMDDHHMMSS=%_DATE:~-10,4%%_DATE:~-5,2%%_DATE:~-2%%_TIME:~0,2%%_TIME:~3,2%%_TIME:~6,2%
title %WINDOW_TITLE%

set JAVA_HOME=C:\app\jdk1.8.0_25
set PATH=%JAVA_HOME%\bin
set CATALINA_HOME=C:\app\tomcat-8.0.14-x86
set CATALINA_BASE=%CATALINA_HOME%
set CATALINA_TMPDIR=%CATALINA_HOME%\temp
set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=start

rem  setting classpath
set "CLASSPATH=%CLASSPATH%;"
set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"
set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar"
set LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties"
set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
rem

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% %LOGGING_MANAGER%

set "CATALINA_OPTS=%CATALINA_OPTS% -server -Xmx1024m -Xms1024m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:MaxMetaspaceSize=60m -XX:MetaspaceSize=60m -Duser.timezone=Asia/Tokyo"
set "CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8686 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "

rem GC
set "CATALINA_OPTS=%CATALINA_OPTS% -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=6 -XX:MaxTenuringThreshold=15 -XX:TargetSurvivorRatio=80 "

rem GCログ
set _GCLOG=-verbose:gc -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+PrintGCDateStamps -Xloggc:%CATALINA_HOME%\logs\gc-%TOM_INSTANCE_NAME%-%YYYYMMDDHHMMSS%.log

java.exe  %JAVA_OPTS% %CATALINA_OPTS% %_GCLOG% -classpath "%CLASSPATH%"  -Dcatalina.base="%CATALINA_BASE%"  -Dcatalina.home="%CATALINA_HOME%"  -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %ACTION%

Java8+tomcat8.0.14の停止の場合

@echo on
set JAVA_HOME=C:\app\jdk1.8.0_25
set PATH=%JAVA_HOME%\bin
set CATALINA_HOME=C:\app\tomcat-8.0.14-x86

set CATALINA_BASE=%CATALINA_HOME%
set CATALINA_TMPDIR=%CATALINA_HOME%\temp
set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=stop

rem  setting classpath
set "CLASSPATH=%CLASSPATH%;"
set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"
set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar"
set LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties"
set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% %LOGGING_MANAGER%

echo Using CATALINA_BASE:   "%CATALINA_BASE%"
echo Using CATALINA_HOME:   "%CATALINA_HOME%"
echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"

java.exe %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %ACTION%
goto end

:end

Java1.4.2+tomcat4.1.30の起動の場合

@echo off
set TOM_INSTANCE_NAME=Tomcat4-1-30
set TOM_PORT=8080

set _DATE=%DATE%
set _TIME=%TIME: =0%

set WINDOW_TITLE=%COMPUTERNAME%-%TOM_INSTANCE_NAME%:%TOM_PORT% %_DATE%-%_TIME%
set YYYYMMDDHHMMSS=%_DATE:~-10,4%%_DATE:~-5,2%%_DATE:~-2%%_TIME:~0,2%%_TIME:~3,2%%_TIME:~6,2%
title %WINDOW_TITLE%

@echo on
set JAVA_HOME=C:\app\j2sdk1.4.2_19
set PATH=%JAVA_HOME%\bin;%JVMSTAT%\bat;
set CATALINA_HOME=C:app\tomcat-4.1.30
set CLASSPATH=%JAVA_HOME%\lib\tools.jar

java.exe -server -Xmx512m -Xms512m -Xmn128m -XX:+UseTLAB -XX:SurvivorRatio=2 -XX:MaxPermSize=45m -XX:PermSize=30m -Xloggc:%CATALINA_HOME%\logs\gc-%TOM_INSTANCE_NAME%-%YYYYMMDDHHMMSS%.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar -Duser.timezone=Asia/Tokyo -Duser.dir=%CATALINA_HOME% %CATALINA_HOME%\bin\bootstrap.jar start