すぐに使える Apache Tomcat インテグレーション(Linux / UNIX)

Apache Tomcat 11.0.x インテグレーション

こちらでは、Apache Tomcat 11.0.22 をスムーズにセットアップするための手順を説明します。 Tomcat 11 シリーズのその他のバージョンも同様に動作します。

Tomcat をダウンロード

Tomcat 11 ソフトウェアダウンロードから tar.gz ファイルとして Tomcat をダウンロードします。 特定のバージョンはアーカイブページからもダウンロードできます。 ここでは apache-tomcat-11.0.22.tar.gz を使用して作業を進めます。

アーカイブを解凍して apache-tomcat-11.0.22 ディレクトリを取得します。 必要に応じて、名称を変更してください。

Wrapper をダウンロード

以下の手順は、Java Service Wrapper のバージョン 3.7.0 で動作するように設計されています。 これより前のバージョンを使用することも可能ですが、いくつかの変更が必要になる場合があります。

使用するエディション(プロフェッショナル、スタンダード、または コミュニティ)を決定し、対象のプラットフォーム、ビット数、およびアーキテクチャを選択します。 その後、インストーラーまたはアーカイブをダウンロードし、インストールまたは解凍(展開)を行ってください。 ここでは、Linux x86 上で プロフェッショナル版 64-bit 使用するものとして進めます。

Wrapper のインテグレーション

必要な Wrapper ファイルの配置を容易にするため、解凍した apache-tomcat-11.0.22 ディレクトリ内に updateWrapper.sh という名前で以下の PowerShell スクリプトを作成します。 上記で Wrapper をインストールまたは解凍(展開)した場所に合わせて、パスを変更してください。 また、同ファイルへの実行権限の付与(実行可能状態への変更)をお忘れにならないようご注意ください。

#!/bin/sh
WRAPPER_HOME=../wrapper-linux-x86-64-3.7.0-pro
TOMCAT_HOME=.
WRAPPER_SCRIPT=tomcat.sh

if [ -d ${WRAPPER_HOME}/lang ]
then
    mkdir -p ${TOMCAT_HOME}/lang
    cp -n ${WRAPPER_HOME}/lang/wrapper_*.mo ${TOMCAT_HOME}/lang/.
    cp -n ${WRAPPER_HOME}/lang/wrapperjni_*.mo ${TOMCAT_HOME}/lang/.
fi
if [ -f ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ]
then
    cp -n ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ${TOMCAT_HOME}/conf/wrapper-license.conf
fi

cp ${WRAPPER_HOME}/bin/wrapper ${TOMCAT_HOME}/bin/.
cp ${WRAPPER_HOME}/lib/wrapper.jar ${TOMCAT_HOME}/bin/.
cp ${WRAPPER_HOME}/lib/libwrapper.* ${TOMCAT_HOME}/bin/.
cp ${WRAPPER_HOME}/src/bin/App.sh.in ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}

sed -i '' -e 's/@app\.name@/tomcat/g' ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.long\.name@/Tomcat Application Server/g' ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}
chmod +x ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}

スクリプトを実行。

./updateWrapper.sh

この設定ではインテグレーション方法 2 を使用します。

注意

JAVA_HOME を設定する必要がありますが、システム環境に定義されている場合はデフォルトでそれが使用されます。 なお Tomcat 11.0.x シリーズ では、Java 17 以降のバージョンを指定する必要があります。

Create the Wrapper configuration file as conf/wrapper.conf with the following content: 以下の内容で、Wrapper 設定ファイルを conf/wrapper.conf として作成します。

@encoding=UTF-8
# The configuration file must begin with a line declaring its encoding.

# Default mode for file inclusions
@include.default_mode=required

# Include file problems can be debugged by removing '#' at the beginning
#  of the following line:
#@include.debug

#********************************************************************
# Environment
#********************************************************************
set.default.JAVA_HOME=(SetMe)

#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
#  License Key to start.  Licenses can be purchased or a trial license
#  requested on the following pages:
# https://wrapper.tanukisoftware.com/purchase
# https://wrapper.tanukisoftware.com/trial

# The Wrapper will look for either of the following optional files for a
#  valid License Key.  License Key properties can optionally be included
#  directly in this configuration file.
@include.optional ../conf/wrapper-license.conf
@include.optional ../conf/wrapper-license-%WRAPPER_HOST_NAME%.conf

# The following property will output information about which License Key(s)
#  are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE

#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the language and locale which the Wrapper should use.
#wrapper.lang=en_US # en_US or ja_JP

# Specify the location of the language resource files (*.mo).
wrapper.lang.folder=../lang

#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
wrapper.java.command=%JAVA_HOME%/bin/java

# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO

# Wrapper Jar file
wrapper.jarfile=../bin/wrapper.jar

# Log level for notices about missing Java Classpath entries.
wrapper.java.classpath.missing.loglevel=WARN

# Java Version control
wrapper.java.version.output=true
wrapper.java.version.min=17
#wrapper.java.version.max=

# Java Classpath.  Add class path elements as needed starting from 1
wrapper.java.classpath.1=../bin/*.jar

# Java Modulepath. (Requires Java 9 or above)
#  Add module path elements as needed starting from 1
#wrapper.java.module_path.1=

# Java Module list. (Requires Java 9 or above)
#  Add module names as needed starting from 1
#wrapper.java.module.1=

# Java Library Path (location of wrapper.dll or libwrapper.so)
wrapper.java.library.path.1=../bin

# Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE

# Java Additional Parameters
wrapper.java.additional.1=-Djava.util.logging.config.file=../conf/logging.properties
wrapper.java.additional.2=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
wrapper.java.additional.3=-Djdk.tls.ephemeralDHKeySize=2048
wrapper.java.additional.4=-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
wrapper.java.additional.5=-Dsun.io.useCanonCaches=false -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
wrapper.java.additional.6=-Djava.io.tmpdir=../temp

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=256

# Application System Properties passed via the backend.
#  Core Java System Properties must be passed using wrapper.java.additional.<n>.
wrapper.app.property.1=ignore.endorsed.dirs=
wrapper.app.property.2=catalina.base=..
wrapper.app.property.3=catalina.home=..

# Java Main class.  This class must implement the WrapperListener interface
#  or guarantee that the WrapperManager class is initialized.
#  Helper classes are provided to do this for you.
#  See the following page for details:
#  https://wrapper.tanukisoftware.com/doc/english/integrate.html
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp

# Application parameters.
#  Pass parameters via the backend instead of the command line.
#wrapper.app.parameter.backend=TRUE

#  Add parameters as needed starting from 1
wrapper.app.parameter.1=org.apache.catalina.startup.Bootstrap
wrapper.app.parameter.2=1
wrapper.app.parameter.3=start
wrapper.app.parameter.4=org.apache.catalina.startup.Bootstrap
wrapper.app.parameter.5=TRUE
wrapper.app.parameter.6=1
wrapper.app.parameter.7=stop

#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE

# Format of output for the console.  (See docs for formats)
wrapper.console.format=LPTM

# Log Level for console output.  (See docs for log levels)
wrapper.console.loglevel=INFO

# Log file to use for Wrapper output logging.
wrapper.logfile=../logs/wrapper.log

# Format of output for the log file.  (See docs for formats)
wrapper.logfile.format=LPTM

# Log Level for log file output.  (See docs for log levels)
wrapper.logfile.loglevel=INFO

# Roll mode of the log file.
#  SIZE_OR_WRAPPER causes the file to be rolled whenever its size exceeds the
#  value defined by wrapper.logfile.maxsize, or whenever the Wrapper is
#  launched.
wrapper.logfile.rollmode=SIZE_OR_WRAPPER

# Maximum size that the log file will be allowed to grow to before
#  the log is rolled. Size is specified in bytes.  The default value
#  of 0 disables log rolling.  May abbreviate with the 'k' (kb) or
#  'm' (mb) suffixes.  For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=10m

# Maximum number of rolled log files which will be allowed before old
#  files are deleted.  The default value of 0 implies no limit.
wrapper.logfile.maxfiles=9

# Log Level for sys/event log output.  (See docs for log levels)
wrapper.syslog.loglevel=NONE

#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE

# Do not start if the pid file already exists.
wrapper.pidfile.strict=TRUE

# Title to use when running as a console
wrapper.console.title=Tomcat Application Server

#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=60
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL

# Out Of Memory detection.
#  Ignore -verbose:class output to avoid false positives.
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
#  Ignore -Xlog:class+load=level output to avoid false positives.
wrapper.filter.trigger.1001=[class,load] java.lang.OutOfMemoryError
wrapper.filter.action.1001=NONE
# (Simple match)
wrapper.filter.trigger.1002=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1002=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1002=TRUE
wrapper.filter.action.1002=RESTART
wrapper.filter.message.1002=The JVM has run out of memory.

#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>

# Configure the log attached to event emails.
#wrapper.event.default.email.maillog=ATTACHMENT
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO

# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE

# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n

#********************************************************************
# Wrapper Secure File Properties
#********************************************************************
# To enforce the principle of least privilege for files containing
#  sensitive data, the Wrapper requires that all permissions granted
#  to these files be explicitly allowed in the configuration.
#  Please read the documentation for the full list of properties.

# Allow specific accounts or groups on Windows.
#wrapper.secure_file.check.windows.allowed_account.1=NT AUTHORITY\SYSTEM
#wrapper.secure_file.check.windows.allowed_account.2=BUILTIN\Administrators

# Allow specific groups on Unix systems.
#wrapper.secure_file.check.unix.allowed_group.1=<Group_Of_Users>

# Additional files to check for permissions (Requires Standard Edition)
#wrapper.secure_file.additional.1=<Secured_File>

#********************************************************************
# Wrapper Windows Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
#  using this configuration file has been installed as a service.
#  Please uninstall the service before modifying this section.
#  The service can then be reinstalled.

# Name of the service
wrapper.name=tomcat

# Display name of the service
wrapper.displayname=Tomcat

# Description of the service
wrapper.description=Tomcat Application Server

# Service dependencies.  Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=

# Mode in which the service is installed.
#  AUTO_START, DELAY_START (Requires Standard Edition) or DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# Account to use when running the service.
#  The default blank value will use LocalSystem, which is highly privileged
#  account on Windows. Please read the documentation page for this property to
#  learn about other account types that can be used.
wrapper.ntservice.account=

# Allow the current user to perform certain actions without being prompted for
#  administrator credentials. (Requires Professional Edition)
#wrapper.ntservice.permissions.1.account=CURRENT_USER
#wrapper.ntservice.permissions.1.allow=START, STOP, PAUSE_RESUME

注意

スタンダード版またはプロフェッショナル版をご利用の場合は、デフォルトの15分ライセンスが conf/wrapper-license.conf としてコピーされます。 それより長く実行するには、トライアルライセンス、サーバーライセンス、または開発用ライセンスで更新する必要があります。

実行

コンソールで実行する場合、

  • bin/tomcat.sh console を実行してください。

daemon (service) として実行する場合、下記のコマンドを実行してください。

  • サービスインストール:bin/tomcat.sh install

  • サービス開始:bin/tomcat.sh start

  • サービス停止:bin/tomcat.sh stop

  • サービスアンインストール:bin/tomcat.sh remove

使用可能なコマンドの一覧を表示するには、

  • bin/tomcat.sh を実行してください。

ログファイル logs/wrapper.log を tail コマンド等で監視することで、Wrapper のログ出力と Java からのコンソール出力を併せて確認できます。 その他の Tomcat ログファイルもこのディレクトリ内に保存されます。

Apache Tomcat 10.1.x のインテグレーション

こちらでは、Apache Tomcat 10.1.55 をスムーズにセットアップするための手順を説明します。 Tomcat 10 シリーズのその他のバージョンでも、同様の手順で動作します。

Tomcat をダウンロード

Tomcat 10 ソフトウェアダウンロードから tar.gz ファイルとして Tomcat をダウンロードします。 特定のバージョンはアーカイブページからもダウンロードすることも可能です。 ここでは apache-tomcat-10.1.55.tar.gz を使用して作業を進めます。

アーカイブを解凍し apache-tomcat-10.1.55 ディレクトリを取得します。 必要に応じて、名称を変更してください。

Wrapper をダウンロード

以下の手順は、Java Service Wrapper のバージョン 3.7.0 で動作するように設計されています。 これより前のバージョンを使用することも可能ですが、いくつかの変更が必要になる場合があります。

使用するエディション(プロフェッショナル、スタンダード、または コミュニティ)を決定し、対象のプラットフォーム、ビット数、およびアーキテクチャを選択します。 次にインストーラーまたはアーカイブをダウンロードして、インストールまたは解凍(展開)を行ってください。 ここでは、Linux x86 上で プロフェッショナル版 64-bit 使用することを前提とします。

Wrapper のインテグレーション

必要な Wrapper ファイルの配置を容易にするため、解凍した apache-tomcat-10.1.55 ディレクトリ内に updateWrapper.sh という名前で以下の PowerShell スクリプトを作成します。 上記で Wrapper をインストールまたは解凍(展開)した場所に合わせて、パスを変更してください。 また、同ファイルへの実行権限の付与(実行可能状態への変更)をお忘れにならないようご注意ください。

#!/bin/sh
WRAPPER_HOME=../wrapper-linux-x86-64-3.7.0-pro
TOMCAT_HOME=.
WRAPPER_SCRIPT=tomcat.sh

if [ -d ${WRAPPER_HOME}/lang ]
then
    mkdir -p ${TOMCAT_HOME}/lang
    cp -n ${WRAPPER_HOME}/lang/wrapper_*.mo ${TOMCAT_HOME}/lang/.
    cp -n ${WRAPPER_HOME}/lang/wrapperjni_*.mo ${TOMCAT_HOME}/lang/.
fi
if [ -f ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ]
then
    cp -n ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ${TOMCAT_HOME}/conf/wrapper-license.conf
fi

cp ${WRAPPER_HOME}/bin/wrapper ${TOMCAT_HOME}/bin/.
cp ${WRAPPER_HOME}/lib/wrapper.jar ${TOMCAT_HOME}/bin/.
cp ${WRAPPER_HOME}/lib/libwrapper.* ${TOMCAT_HOME}/bin/.
cp ${WRAPPER_HOME}/src/bin/App.sh.in ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}

sed -i '' -e 's/@app\.name@/tomcat/g' ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.long\.name@/Tomcat Application Server/g' ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}
chmod +x ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}

スクリプトを実行。

./updateWrapper.sh

この設定ではインテグレーション方法 2 を使用します。

注意

JAVA_HOME を設定する必要がありますが、システム環境に定義されている場合はデフォルトでそれが使用されます。 Tomcat 10.1.x シリーズでは、Java 11 以降のバージョンを指定する必要があります。

以下の内容で、Wrapper 設定ファイルを conf/wrapper.conf として作成します。

@encoding=UTF-8
# The configuration file must begin with a line declaring its encoding.

# Default mode for file inclusions
@include.default_mode=required

# Include file problems can be debugged by removing '#' at the beginning
#  of the following line:
#@include.debug

#********************************************************************
# Environment
#********************************************************************
set.default.JAVA_HOME=(SetMe)

#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
#  License Key to start.  Licenses can be purchased or a trial license
#  requested on the following pages:
# https://wrapper.tanukisoftware.com/purchase
# https://wrapper.tanukisoftware.com/trial

# The Wrapper will look for either of the following optional files for a
#  valid License Key.  License Key properties can optionally be included
#  directly in this configuration file.
@include.optional ../conf/wrapper-license.conf
@include.optional ../conf/wrapper-license-%WRAPPER_HOST_NAME%.conf

# The following property will output information about which License Key(s)
#  are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE

#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the language and locale which the Wrapper should use.
#wrapper.lang=en_US # en_US or ja_JP

# Specify the location of the language resource files (*.mo).
wrapper.lang.folder=../lang

#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
wrapper.java.command=%JAVA_HOME%/bin/java

# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO

# Wrapper Jar file
wrapper.jarfile=../bin/wrapper.jar

# Log level for notices about missing Java Classpath entries.
wrapper.java.classpath.missing.loglevel=WARN

# Java Version control
wrapper.java.version.output=true
wrapper.java.version.min=11
#wrapper.java.version.max=

# Java Classpath.  Add class path elements as needed starting from 1
wrapper.java.classpath.1=../bin/*.jar

# Java Modulepath. (Requires Java 9 or above)
#  Add module path elements as needed starting from 1
#wrapper.java.module_path.1=

# Java Module list. (Requires Java 9 or above)
#  Add module names as needed starting from 1
#wrapper.java.module.1=

# Java Library Path (location of wrapper.dll or libwrapper.so)
wrapper.java.library.path.1=../bin

# Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE

# Java Additional Parameters
wrapper.java.additional.1=-Djava.util.logging.config.file=../conf/logging.properties
wrapper.java.additional.2=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
wrapper.java.additional.3=-Djdk.tls.ephemeralDHKeySize=2048
wrapper.java.additional.4=-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
wrapper.java.additional.5=-Dsun.io.useCanonCaches=false -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
wrapper.java.additional.6=-Djava.io.tmpdir=../temp

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=256

# Application System Properties passed via the backend.
#  Core Java System Properties must be passed using wrapper.java.additional.<n>.
wrapper.app.property.1=ignore.endorsed.dirs=
wrapper.app.property.2=catalina.base=..
wrapper.app.property.3=catalina.home=..

# Java Main class.  This class must implement the WrapperListener interface
#  or guarantee that the WrapperManager class is initialized.
#  Helper classes are provided to do this for you.
#  See the following page for details:
#  https://wrapper.tanukisoftware.com/doc/english/integrate.html
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp

# Application parameters.
#  Pass parameters via the backend instead of the command line.
#wrapper.app.parameter.backend=TRUE

#  Add parameters as needed starting from 1
wrapper.app.parameter.1=org.apache.catalina.startup.Bootstrap
wrapper.app.parameter.2=1
wrapper.app.parameter.3=start
wrapper.app.parameter.4=org.apache.catalina.startup.Bootstrap
wrapper.app.parameter.5=TRUE
wrapper.app.parameter.6=1
wrapper.app.parameter.7=stop

#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE

# Format of output for the console.  (See docs for formats)
wrapper.console.format=LPTM

# Log Level for console output.  (See docs for log levels)
wrapper.console.loglevel=INFO

# Log file to use for Wrapper output logging.
wrapper.logfile=../logs/wrapper.log

# Format of output for the log file.  (See docs for formats)
wrapper.logfile.format=LPTM

# Log Level for log file output.  (See docs for log levels)
wrapper.logfile.loglevel=INFO

# Roll mode of the log file.
#  SIZE_OR_WRAPPER causes the file to be rolled whenever its size exceeds the
#  value defined by wrapper.logfile.maxsize, or whenever the Wrapper is
#  launched.
wrapper.logfile.rollmode=SIZE_OR_WRAPPER

# Maximum size that the log file will be allowed to grow to before
#  the log is rolled. Size is specified in bytes.  The default value
#  of 0 disables log rolling.  May abbreviate with the 'k' (kb) or
#  'm' (mb) suffixes.  For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=10m

# Maximum number of rolled log files which will be allowed before old
#  files are deleted.  The default value of 0 implies no limit.
wrapper.logfile.maxfiles=9

# Log Level for sys/event log output.  (See docs for log levels)
wrapper.syslog.loglevel=NONE

#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE

# Do not start if the pid file already exists.
wrapper.pidfile.strict=TRUE

# Title to use when running as a console
wrapper.console.title=Tomcat Application Server

#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=60
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL

# Out Of Memory detection.
#  Ignore -verbose:class output to avoid false positives.
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
#  Ignore -Xlog:class+load=level output to avoid false positives.
wrapper.filter.trigger.1001=[class,load] java.lang.OutOfMemoryError
wrapper.filter.action.1001=NONE
# (Simple match)
wrapper.filter.trigger.1002=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1002=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1002=TRUE
wrapper.filter.action.1002=RESTART
wrapper.filter.message.1002=The JVM has run out of memory.

#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>

# Configure the log attached to event emails.
#wrapper.event.default.email.maillog=ATTACHMENT
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO

# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE

# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n

#********************************************************************
# Wrapper Secure File Properties
#********************************************************************
# To enforce the principle of least privilege for files containing
#  sensitive data, the Wrapper requires that all permissions granted
#  to these files be explicitly allowed in the configuration.
#  Please read the documentation for the full list of properties.

# Allow specific accounts or groups on Windows.
#wrapper.secure_file.check.windows.allowed_account.1=NT AUTHORITY\SYSTEM
#wrapper.secure_file.check.windows.allowed_account.2=BUILTIN\Administrators

# Allow specific groups on Unix systems.
#wrapper.secure_file.check.unix.allowed_group.1=<Group_Of_Users>

# Additional files to check for permissions (Requires Standard Edition)
#wrapper.secure_file.additional.1=<Secured_File>

#********************************************************************
# Wrapper Windows Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
#  using this configuration file has been installed as a service.
#  Please uninstall the service before modifying this section.
#  The service can then be reinstalled.

# Name of the service
wrapper.name=tomcat

# Display name of the service
wrapper.displayname=Tomcat

# Description of the service
wrapper.description=Tomcat Application Server

# Service dependencies.  Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=

# Mode in which the service is installed.
#  AUTO_START, DELAY_START (Requires Standard Edition) or DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# Account to use when running the service.
#  The default blank value will use LocalSystem, which is highly privileged
#  account on Windows. Please read the documentation page for this property to
#  learn about other account types that can be used.
wrapper.ntservice.account=

# Allow the current user to perform certain actions without being prompted for
#  administrator credentials. (Requires Professional Edition)
#wrapper.ntservice.permissions.1.account=CURRENT_USER
#wrapper.ntservice.permissions.1.allow=START, STOP, PAUSE_RESUME

注意

スタンダード版またはプロフェッショナル版をご利用の場合は、デフォルトの15分ライセンスが conf/wrapper-license.conf としてコピーされます。 それより長く実行するには、トライアルライセンス、サーバーライセンス、または開発用ライセンスで更新する必要があります。

実行

コンソールで実行する場合、

  • bin/tomcat.sh console を実行してください。

daemon (service) として実行する場合、下記のコマンドを実行してください。

  • サービスインストール:bin/tomcat.sh install

  • サービス開始:bin/tomcat.sh start

  • サービス停止:bin/tomcat.sh stop

  • サービスアンインストール:bin/tomcat.sh remove

使用可能なコマンドの一覧を表示するには、

  • bin/tomcat.sh を実行してください。

ログファイル logs/wrapper.log を tail コマンド等で監視することで、Wrapper のログ出力と Java からのコンソール出力を併せて確認できます。 その他の Tomcat ログファイルもこのディレクトリ内に保存されます。

Apache Tomcat 9.0.x のインテグレーション

こちらでは、Apache Tomcat 9.0.118 をスムーズにセットアップするための手順を説明します。 Tomcat 9 シリーズのその他のバージョンも同様の手順で動作します。

Tomcat をダウンロード

Tomcat 9 ソフトウェアダウンロード から tar.gz ファイルとして Tomcat をダウンロードします。 特定のバージョンはアーカイブページからもダウンロードできます。 ここでは apache-tomcat-9.0.118.tar.gz を使用して作業を進めます。

アーカイブを解凍して apache-tomcat-9.0.118 ディレクトリを取得します。 必要に応じて、名称を変更してください。

Wrapper をダウンロード

以下の手順は、Java Service Wrapper のバージョン 3.7.0 で動作するように設計されています。 これより前のバージョンを使用することも可能ですが、いくつかの変更が必要になる場合があります。

使用するエディション(プロフェッショナル、スタンダード、または コミュニティ)を決定し、対象のプラットフォーム、ビット数、およびアーキテクチャを選択します。 次にインストーラーまたはアーカイブをダウンロードして、インストールまたは解凍(展開)を行ってください。 ここでは、Linux x86 上で プロフェッショナル版 64-bit 使用することを前提とします。

Wrapper のインテグレーション

必要な Wrapper ファイルの配置を容易にするため、解凍した apache-tomcat-9.0.118 ディレクトリ内に updateWrapper.sh という名前で以下の PowerShell スクリプトを作成します。 上記で Wrapper をインストールまたは解凍(展開)した場所に合わせて、パスを変更してください。 また、同ファイルへの実行権限の付与(実行可能状態への変更)をお忘れにならないようご注意ください。

#!/bin/sh
WRAPPER_HOME=../wrapper-linux-x86-64-3.7.0-pro
TOMCAT_HOME=.
WRAPPER_SCRIPT=tomcat.sh

if [ -d ${WRAPPER_HOME}/lang ]
then
    mkdir -p ${TOMCAT_HOME}/lang
    cp -n ${WRAPPER_HOME}/lang/wrapper_*.mo ${TOMCAT_HOME}/lang/.
    cp -n ${WRAPPER_HOME}/lang/wrapperjni_*.mo ${TOMCAT_HOME}/lang/.
fi
if [ -f ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ]
then
    cp -n ${WRAPPER_HOME}/src/conf/wrapper-license-time.conf ${TOMCAT_HOME}/conf/wrapper-license.conf
fi

cp ${WRAPPER_HOME}/bin/wrapper ${TOMCAT_HOME}/bin/.
cp ${WRAPPER_HOME}/lib/wrapper.jar ${TOMCAT_HOME}/bin/.
cp ${WRAPPER_HOME}/lib/libwrapper.* ${TOMCAT_HOME}/bin/.
cp ${WRAPPER_HOME}/src/bin/App.sh.in ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}

sed -i '' -e 's/@app\.name@/tomcat/g' ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}
sed -i '' -e 's/@app\.long\.name@/Tomcat Application Server/g' ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}
chmod +x ${TOMCAT_HOME}/bin/${WRAPPER_SCRIPT}

スクリプトを実行。

./updateWrapper.sh

この設定ではインテグレーション方法 2 を使用します。

注意

JAVA_HOME を設定する必要がありますが、システム環境に定義されている場合はデフォルトでそれが使用されます。 Tomcat 9.0.x シリーズでは、Java 8 以降のバージョンを指定する必要があります。

以下の内容で、Wrapper 設定ファイルを conf/wrapper.conf として作成します。

@encoding=UTF-8
# The configuration file must begin with a line declaring its encoding.

# Default mode for file inclusions
@include.default_mode=required

# Include file problems can be debugged by removing '#' at the beginning
#  of the following line:
#@include.debug

#********************************************************************
# Environment
#********************************************************************
set.default.JAVA_HOME=(SetMe)

#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
#  License Key to start.  Licenses can be purchased or a trial license
#  requested on the following pages:
# https://wrapper.tanukisoftware.com/purchase
# https://wrapper.tanukisoftware.com/trial

# The Wrapper will look for either of the following optional files for a
#  valid License Key.  License Key properties can optionally be included
#  directly in this configuration file.
@include.optional ../conf/wrapper-license.conf
@include.optional ../conf/wrapper-license-%WRAPPER_HOST_NAME%.conf

# The following property will output information about which License Key(s)
#  are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE

#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the language and locale which the Wrapper should use.
#wrapper.lang=en_US # en_US or ja_JP

# Specify the location of the language resource files (*.mo).
wrapper.lang.folder=../lang

#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
wrapper.java.command=%JAVA_HOME%/bin/java

# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO

# Wrapper Jar file
wrapper.jarfile=../bin/wrapper.jar

# Log level for notices about missing Java Classpath entries.
wrapper.java.classpath.missing.loglevel=WARN

# Java Version control
wrapper.java.version.output=true
wrapper.java.version.min=8
#wrapper.java.version.max=

# Java Classpath.  Add class path elements as needed starting from 1
wrapper.java.classpath.1=../bin/*.jar

# Java Modulepath. (Requires Java 9 or above)
#  Add module path elements as needed starting from 1
#wrapper.java.module_path.1=

# Java Module list. (Requires Java 9 or above)
#  Add module names as needed starting from 1
#wrapper.java.module.1=

# Java Library Path (location of wrapper.dll or libwrapper.so)
wrapper.java.library.path.1=../bin

# Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE

# Java Additional Parameters
wrapper.java.additional.1=-Djava.util.logging.config.file=../conf/logging.properties
wrapper.java.additional.2=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
wrapper.java.additional.3=-Djdk.tls.ephemeralDHKeySize=2048
wrapper.java.additional.4=-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
wrapper.java.additional.5=-Dsun.io.useCanonCaches=false -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
wrapper.java.additional.6=-Djava.io.tmpdir=../temp

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=256

# Application System Properties passed via the backend.
#  Core Java System Properties must be passed using wrapper.java.additional.<n>.
wrapper.app.property.1=ignore.endorsed.dirs=
wrapper.app.property.2=catalina.base=..
wrapper.app.property.3=catalina.home=..

# Java Main class.  This class must implement the WrapperListener interface
#  or guarantee that the WrapperManager class is initialized.
#  Helper classes are provided to do this for you.
#  See the following page for details:
#  https://wrapper.tanukisoftware.com/doc/english/integrate.html
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp

# Application parameters.
#  Pass parameters via the backend instead of the command line.
#wrapper.app.parameter.backend=TRUE

#  Add parameters as needed starting from 1
wrapper.app.parameter.1=org.apache.catalina.startup.Bootstrap
wrapper.app.parameter.2=1
wrapper.app.parameter.3=start
wrapper.app.parameter.4=org.apache.catalina.startup.Bootstrap
wrapper.app.parameter.5=TRUE
wrapper.app.parameter.6=1
wrapper.app.parameter.7=stop

#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE

# Format of output for the console.  (See docs for formats)
wrapper.console.format=LPTM

# Log Level for console output.  (See docs for log levels)
wrapper.console.loglevel=INFO

# Log file to use for Wrapper output logging.
wrapper.logfile=../logs/wrapper.log

# Format of output for the log file.  (See docs for formats)
wrapper.logfile.format=LPTM

# Log Level for log file output.  (See docs for log levels)
wrapper.logfile.loglevel=INFO

# Roll mode of the log file.
#  SIZE_OR_WRAPPER causes the file to be rolled whenever its size exceeds the
#  value defined by wrapper.logfile.maxsize, or whenever the Wrapper is
#  launched.
wrapper.logfile.rollmode=SIZE_OR_WRAPPER

# Maximum size that the log file will be allowed to grow to before
#  the log is rolled. Size is specified in bytes.  The default value
#  of 0 disables log rolling.  May abbreviate with the 'k' (kb) or
#  'm' (mb) suffixes.  For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=10m

# Maximum number of rolled log files which will be allowed before old
#  files are deleted.  The default value of 0 implies no limit.
wrapper.logfile.maxfiles=9

# Log Level for sys/event log output.  (See docs for log levels)
wrapper.syslog.loglevel=NONE

#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE

# Do not start if the pid file already exists.
wrapper.pidfile.strict=TRUE

# Title to use when running as a console
wrapper.console.title=Tomcat Application Server

#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=60
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL

# Out Of Memory detection.
#  Ignore -verbose:class output to avoid false positives.
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
#  Ignore -Xlog:class+load=level output to avoid false positives.
wrapper.filter.trigger.1001=[class,load] java.lang.OutOfMemoryError
wrapper.filter.action.1001=NONE
# (Simple match)
wrapper.filter.trigger.1002=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1002=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1002=TRUE
wrapper.filter.action.1002=RESTART
wrapper.filter.message.1002=The JVM has run out of memory.

#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>

# Configure the log attached to event emails.
#wrapper.event.default.email.maillog=ATTACHMENT
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO

# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE

# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n

#********************************************************************
# Wrapper Secure File Properties
#********************************************************************
# To enforce the principle of least privilege for files containing
#  sensitive data, the Wrapper requires that all permissions granted
#  to these files be explicitly allowed in the configuration.
#  Please read the documentation for the full list of properties.

# Allow specific accounts or groups on Windows.
#wrapper.secure_file.check.windows.allowed_account.1=NT AUTHORITY\SYSTEM
#wrapper.secure_file.check.windows.allowed_account.2=BUILTIN\Administrators

# Allow specific groups on Unix systems.
#wrapper.secure_file.check.unix.allowed_group.1=<Group_Of_Users>

# Additional files to check for permissions (Requires Standard Edition)
#wrapper.secure_file.additional.1=<Secured_File>

#********************************************************************
# Wrapper Windows Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
#  using this configuration file has been installed as a service.
#  Please uninstall the service before modifying this section.
#  The service can then be reinstalled.

# Name of the service
wrapper.name=tomcat

# Display name of the service
wrapper.displayname=Tomcat

# Description of the service
wrapper.description=Tomcat Application Server

# Service dependencies.  Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=

# Mode in which the service is installed.
#  AUTO_START, DELAY_START (Requires Standard Edition) or DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# Account to use when running the service.
#  The default blank value will use LocalSystem, which is highly privileged
#  account on Windows. Please read the documentation page for this property to
#  learn about other account types that can be used.
wrapper.ntservice.account=

# Allow the current user to perform certain actions without being prompted for
#  administrator credentials. (Requires Professional Edition)
#wrapper.ntservice.permissions.1.account=CURRENT_USER
#wrapper.ntservice.permissions.1.allow=START, STOP, PAUSE_RESUME

注意

スタンダード版またはプロフェッショナル版をご利用の場合は、デフォルトの15分ライセンスが conf/wrapper-license.conf としてコピーされます。 それより長く実行するには、トライアルライセンス、サーバーライセンス、または開発用ライセンスで更新する必要があります。

実行

コンソールで実行する場合、

  • bin/tomcat.sh console を実行してください。

daemon (service) として実行する場合、下記のコマンドを実行してください。

  • サービスインストール:bin/tomcat.sh install

  • サービス開始:bin/tomcat.sh start

  • サービス停止:bin/tomcat.sh stop

  • サービスアンインストール:bin/tomcat.sh remove

使用可能なコマンドの一覧を表示するには、

  • bin/tomcat.sh を実行してください。

ログファイル logs/wrapper.log を tail コマンド等で監視することで、Wrapper のログ出力と Java からのコンソール出力を併せて確認できます。 その他の Tomcat ログファイルもこのディレクトリ内に保存されます。

フィードバックのお願い

Tomcat のパワーユーザーの方で、本ドキュメントの改善点等のご提案がございましたら、ぜひ support@tanukisoftware.com までご連絡いただけますと幸いです。