- はじめに
- Managerアプリケーションアクセスの設定
- HTMLユーザーフレンドリーインターフェース
- サポートされているManagerコマンド
- 共通パラメーター
- 新しいアプリケーションアーカイブ (WAR) をリモートでデプロイ
- ローカルパスから新しいアプリケーションをデプロイ
- 現在デプロイされているアプリケーションを一覧表示
- 既存のアプリケーションをリロード
- OSおよびJVMプロパティを一覧表示
- 利用可能なグローバルJNDIリソースを一覧表示
- セッション統計
- セッションの期限切れ
- 既存のアプリケーションを開始
- 既存のアプリケーションを停止
- 既存のアプリケーションをアンデプロイ
- メモリリークの検出
- コネクターSSL/TLS暗号情報
- コネクターSSL/TLS証明書チェーン情報
- コネクターSSL/TLS信頼済み証明書情報
- TLS設定のリロード
- スレッドダンプ
- VM情報
- 設定を保存
- サーバーのステータス
- JMXプロキシサーブレットの使用
- Antを使用したManagerコマンドの実行
Managerアプリの使い方
目次
はじめに
多くの本番環境において、コンテナ全体をシャットダウンして再起動することなく、新しいウェブアプリケーションをデプロイしたり、既存のウェブアプリケーションをアンデプロイしたりする機能は非常に有用です。さらに、Tomcatサーバーの設定ファイルでreloadable
と宣言していなくても、既存のアプリケーションに自身をリロードするよう要求することができます。
これらの機能をサポートするため、Tomcatには以下の機能をサポートするウェブアプリケーション(デフォルトではコンテキストパス/manager
にインストールされています)が含まれています。
- アップロードされたWARファイルの内容から新しいウェブアプリケーションをデプロイします。
- 指定されたコンテキストパスに、サーバーファイルシステムから新しいウェブアプリケーションをデプロイします。
- 現在デプロイされているウェブアプリケーションと、それらのウェブアプリで現在アクティブなセッションを一覧表示します。
- 既存のウェブアプリケーションをリロードし、
/WEB-INF/classes
または/WEB-INF/lib
の内容の変更を反映させます。 - OSおよびJVMプロパティの値を一覧表示します。
- 利用可能なグローバルJNDIリソースを一覧表示します。これらは、
<Context>
デプロイメント記述内にネストされた<ResourceLink>
要素を準備するデプロイメントツールで使用されます。 - 停止中のアプリケーションを開始します(これにより、再び利用可能になります)。
- 既存のアプリケーションを停止します(これにより利用不可になります)が、アンデプロイはしません。
- デプロイされたウェブアプリケーションをアンデプロイし、そのドキュメントベースディレクトリを削除します(ファイルシステムからデプロイされた場合を除く)。
デフォルトのTomcatインストールには、デフォルトの仮想ホスト用に設定されたManagerアプリケーションのインスタンスが含まれています。追加の仮想ホストを作成する場合、それらのホストの1つ以上にManagerアプリケーションのインスタンスを追加したいと思うかもしれません。新しいホストにManagerウェブアプリケーションのContext
インスタンスを追加するには、$CATALINA_BASE/conf/[enginename]/[hostname]
フォルダにmanager.xml
コンテキスト設定ファイルをインストールします。以下に例を示します
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
sameSiteCookies="strict" />
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
Managerウェブアプリケーションを使用するには、3つの方法があります。
- ブラウザで使用するユーザーインターフェースを備えたアプリケーションとして。
localhost
をウェブサイトのホスト名に置き換えることができるURLの例は次のとおりです:https://:8080/manager/html
。 - HTTPリクエストのみを使用する最小限のバージョンで、システム管理者によってセットアップされたスクリプトでの使用に適しています。コマンドはリクエストURIの一部として与えられ、応答は簡単に解析および処理できる単純なテキスト形式です。詳細については、「サポートされているManagerコマンド」を参照してください。
- Ant(バージョン1.4以降)ビルドツール用の便利なタスク定義セット。詳細については、「Antを使用したManagerコマンドの実行」を参照してください。
Managerアプリケーションアクセスの設定
以下の説明では、ほとんどの相対パスが解決されるベースディレクトリを指す変数名$CATALINA_BASE
を使用します。CATALINA_BASE
ディレクトリを設定してTomcatを複数インスタンスで構成していない場合、$CATALINA_BASE
はTomcatをインストールしたディレクトリである$CATALINA_HOME
の値に設定されます。
Tomcatを、インターネット上の誰でもサーバー上でManagerアプリケーションを実行できるデフォルト設定で出荷することは非常に危険です。そのため、Managerアプリケーションは、使用を試みる者は、manager-xxxロールのいずれかが関連付けられたユーザー名とパスワードを使用して認証する必要があるという要件付きで提供されます(ロール名は、必要な機能によって異なります)。さらに、デフォルトのユーザーファイル($CATALINA_BASE/conf/tomcat-users.xml
)には、これらのロールに割り当てられたユーザー名はありません。したがって、Managerアプリケーションへのアクセスはデフォルトで完全に無効になっています。
ロール名は、Managerウェブアプリケーションのweb.xml
ファイルで見つけることができます。利用可能なロールは次のとおりです。
- manager-gui — HTMLインターフェースへのアクセス。
- manager-status — 「サーバーのステータス」ページへのアクセスのみ。
- manager-script — このドキュメントで説明されているツールフレンドリーなプレーンテキストインターフェースと、「サーバーのステータス」ページへのアクセス。
- manager-jmx — JMXプロキシインターフェースと、「サーバーのステータス」ページへのアクセス。
HTMLインターフェースはCSRF(クロスサイトリクエストフォージェリ)攻撃から保護されていますが、テキストおよびJMXインターフェースは保護できません。これは、テキストおよびJMXインターフェースへのアクセスを許可されたユーザーは、ウェブブラウザでManagerアプリケーションにアクセスする際に注意が必要であることを意味します。CSRF保護を維持するには
- ウェブブラウザを使用して、manager-scriptまたはmanager-jmxロールを持つユーザー(例えば、プレーンテキストまたはJMXインターフェースのテストのため)でManagerアプリケーションにアクセスした場合、セッションを終了するためにその後ブラウザのすべてのウィンドウを閉じなければなりません。ブラウザを閉じずに他のサイトにアクセスすると、CSRF攻撃の被害に遭う可能性があります。
- manager-guiロールを持つユーザーに、manager-scriptまたはmanager-jmxロールを付与しないことをお勧めします。
注:JMXプロキシインターフェースは、実質的にTomcatの低レベルのルートのような管理インターフェースです。呼び出すコマンドを知っていれば、多くのことができます。manager-jmxロールを有効にする際には注意が必要です。
Managerウェブアプリケーションへのアクセスを有効にするには、新しいユーザー名/パスワードの組み合わせを作成し、それにmanager-xxxロールのいずれかを関連付けるか、既存のユーザー名/パスワードの組み合わせにmanager-xxxロールを追加する必要があります。このドキュメントの大部分ではテキストインターフェースの使用について説明しているため、この例ではmanager-scriptというロール名を使用します。ユーザー名/パスワードの構成方法は、使用しているレルム実装によって異なります。
- UserDatabaseRealm と MemoryUserDatabase、または MemoryRealm — UserDatabaseRealm と MemoryUserDatabase は、デフォルトの
$CATALINA_BASE/conf/server.xml
で設定されます。MemoryUserDatabase と MemoryRealm の両方は、デフォルトで$CATALINA_BASE/conf/tomcat-users.xml
に保存されているXML形式のファイルを読み取ります。このファイルは、任意のテキストエディタで編集できます。このファイルには、各ユーザーのXML<user>
が含まれており、次のようなものになります。これは、この個人がログオンするために使用するユーザー名とパスワード、および関連付けられているロール名を定義します。既存の1つ以上のユーザーのカンマ区切りの<user username="craigmcc" password="secret" roles="standard,manager-script" />
roles
属性にmanager-scriptロールを追加したり、その割り当てられたロールを持つ新しいユーザーを作成したりできます。 - DataSourceRealm — ユーザーおよびロール情報は、JDBCを介してアクセスされるデータベースに保存されます。お使いの環境の標準手順に従って、既存の1人以上のユーザーにmanager-scriptロールを追加したり、このロールが割り当てられた新しいユーザーを1人以上作成したりします。
- JNDIRealm — ユーザーおよびロール情報は、LDAPを介してアクセスされるディレクトリサーバーに保存されます。お使いの環境の標準手順に従って、既存の1人以上のユーザーにmanager-scriptロールを追加したり、このロールが割り当てられた新しいユーザーを1人以上作成したりします。
次のセクションで説明するManagerコマンドのいずれかを初めて発行しようとすると、BASIC認証を使用してログオンするように求められます。入力するユーザー名とパスワードは、ユーザーデータベース内でmanager-scriptロールを持つ有効なユーザーを識別できる限り、問題ありません。
パスワード制限に加えて、Managerウェブアプリケーションへのアクセスは、RemoteAddrValve
またはRemoteHostValve
を追加することで、リモートIPアドレスまたはホストによって制限できます。詳細については、バルブドキュメントを参照してください。以下に、IPアドレスによってlocalhostへのアクセスを制限する例を示します。
<Context privileged="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1"/>
</Context>
HTMLユーザーフレンドリーインターフェース
ManagerウェブアプリケーションのユーザーフレンドリーなHTMLインターフェースは以下の場所にあります。
http://{host}:{port}/manager/html
すでに上記で述べたように、これにアクセスするにはmanager-guiロールが必要です。このインターフェースに関するヘルプを提供する別のドキュメントがあります。参照:
HTMLインターフェースはCSRF(クロスサイトリクエストフォージェリ)攻撃から保護されています。HTMLページへの各アクセスはランダムなトークンを生成し、それはセッションに保存され、ページ上のすべてのリンクに含まれます。次のアクションに正しいトークン値がない場合、そのアクションは拒否されます。トークンの有効期限が切れている場合は、Managerのメインページまたはアプリケーション一覧ページからやり直すことができます。
ManagerウェブアプリケーションのHTMLインターフェースのサブタイトルをカスタマイズするには、任意の有効なXMLエスケープされたHTMLコードをHTMLManagerServlet
のhtmlSubTitle
初期化パラメーターに追加できます。
<servlet>
<servlet-name>HTMLManager</servlet-name>
<servlet-class>org.apache.catalina.manager.HTMLManagerServlet</servlet-class>
<init-param>
<param-name>htmlSubTitle</param-name>
<param-value>Company Inc.<br><i style='color:red'>Staging</i></param-value>
</init-param>
...
</servlet>
上記の文字列値はアンエスケープされ、タイトルに追加されます。
Company Inc.<br><i style='color:red'>Staging</i>
サポートされているManagerコマンド
Managerアプリケーションが処理方法を知っているすべてのコマンドは、次のような単一のリクエストURIで指定されます。
http://{host}:{port}/manager/text/{command}?{parameters}
ここで、{host}
と{port}
はTomcatが稼働しているホスト名とポート番号を表し、{command}
は実行したいManagerコマンドを表し、{parameters}
はそのコマンドに固有のクエリパラメーターを表します。以下の図では、ご自身のインストールに合わせてホストとポートを適切にカスタマイズしてください。
コマンドは通常、HTTP GETリクエストによって実行されます。/deploy
コマンドには、HTTP PUTリクエストによって実行される形式があります。
共通パラメーター
ほとんどのコマンドは、以下のクエリパラメーターの1つ以上を受け入れます。
- path - 扱っているウェブアプリケーションのコンテキストパス(先頭のスラッシュを含む)。ROOTウェブアプリケーションを選択するには、「/」を指定します。
注:Managerアプリケーション自体に対して管理コマンドを実行することはできません。
注:path
パラメーターが明示的に指定されていない場合、パスとバージョンは、config
パラメーターから標準のContext命名ルールを使用して導出されます。config
パラメーターが存在しない場合は、war
パラメーターから導出されます。 - version - 並列デプロイメント機能で使用されるこのウェブアプリケーションのバージョン。パスが必要な場所で並列デプロイメントを使用する場合、パスに加えてバージョンを指定する必要があり、一意である必要があるのはパスだけでなくパスとバージョンの組み合わせです。
注:path
が明示的に指定されていない場合、version
パラメーターは無視されます。 - war - ウェブアプリケーションアーカイブ (WAR) ファイルのURL、またはウェブアプリケーションを含むディレクトリのパス名、またはContext設定".xml"ファイル。以下のいずれかの形式でURLを使用できます。
- file:/absolute/path/to/a/directory - ウェブアプリケーションの展開されたバージョンを含むディレクトリの絶対パス。このディレクトリは、指定したコンテキストパスに何の変更もなくアタッチされます。
- file:/absolute/path/to/a/webapp.war - ウェブアプリケーションアーカイブ (WAR) ファイルの絶対パス。これは
/deploy
コマンドに対してのみ有効であり、そのコマンドで許容される唯一の形式です。 - file:/absolute/path/to/a/context.xml - Context設定要素を含むウェブアプリケーションContext設定".xml"ファイルの絶対パス。
- directory - ホストのアプリケーションベースディレクトリ内のウェブアプリケーションコンテキストのディレクトリ名。
- webapp.war - ホストのアプリケーションベースディレクトリ内にあるウェブアプリケーションのWARファイル名。
各コマンドはtext/plain
形式(つまり、HTMLマークアップのないプレーンなASCII)で応答を返します。これにより、人間もプログラムも簡単に読み取ることができます。応答の最初の行は、要求されたコマンドが成功したかどうかを示すOK
またはFAIL
のいずれかで始まります。失敗した場合、最初の行の残りの部分には、発生した問題の説明が含まれます。一部のコマンドには、以下に説明するように追加の情報行が含まれます。
国際化に関する注意 - Managerアプリケーションはメッセージ文字列をリソースバンドルで検索するため、文字列がプラットフォーム向けに翻訳されている可能性があります。以下の例では、メッセージの英語版を示します。
新しいアプリケーションアーカイブ (WAR) をリモートでデプロイ
https://:8080/manager/text/deploy?path=/foo
このHTTP PUTリクエストでリクエストデータとして指定されたウェブアプリケーションアーカイブ(WAR)ファイルをアップロードし、対応する仮想ホストのappBase
ディレクトリにインストールして開始します。appBase
に追加されるWARファイルの名前は、指定されたパスから導出されます。アプリケーションは後で/undeploy
コマンドを使用してアンデプロイ(および対応するWARファイルの削除)できます。
このコマンドはHTTP PUTリクエストによって実行されます。
WARファイルには、/META-INF/context.xml
にContext設定XMLファイルを含めることで、Tomcat固有のデプロイメント設定を含めることができます。
URLパラメーターには以下が含まれます。
update
: trueに設定すると、既存の更新はまずアンデプロイされます。デフォルト値はfalseです。tag
: タグ名を指定すると、デプロイされたウェブアプリをタグまたはラベルと関連付けることができます。ウェブアプリケーションがアンデプロイされても、必要に応じて後でそのタグのみを使用して再デプロイできます。config
: file:/absolute/path/to/a/context.xml形式のContext設定".xml"ファイルのURL。これは、Context設定要素を含むウェブアプリケーションContext設定".xml"ファイルの絶対パスでなければなりません。
注 - このコマンドは、/undeploy
コマンドの論理的な逆です。
インストールと起動が成功した場合、次のような応答を受け取ります。
OK - Deployed application at context path /foo
そうでない場合、応答はFAIL
で始まり、エラーメッセージが含まれます。考えられる問題の原因には以下が含まれます。
- パス/fooにアプリケーションがすでに存在します
現在実行中のすべてのウェブアプリケーションのコンテキストパスは一意である必要があります。したがって、このコンテキストパスを使用している既存のウェブアプリケーションをアンデプロイするか、新しいウェブアプリケーションに別のコンテキストパスを選択する必要があります。このエラーを回避するために、URLのパラメーターとして
update
パラメーターをtrue
の値で指定することができます。その場合、デプロイメントを実行する前に既存のアプリケーションに対してアンデプロイが実行されます。 - 例外が発生しました
新しいウェブアプリケーションを起動しようとしているときに例外が発生しました。詳細についてはTomcatのログを確認してください。考えられる原因としては、
/WEB-INF/web.xml
ファイルの解析に関する問題、またはアプリケーションのイベントリスナーやフィルターの初期化時に不足しているクラスが見つかったことなどが挙げられます。
ローカルパスから新しいアプリケーションをデプロイ
指定されたコンテキストpath
(他のウェブアプリケーションで使用されていないもの)にアタッチされた新しいウェブアプリケーションをデプロイして起動します。このコマンドは、/undeploy
コマンドの論理的な逆です。
このコマンドはHTTP GETリクエストによって実行されます。デプロイコマンドには、いくつかの異なる使用方法があります。
以前にデプロイされたウェブアプリをデプロイ
https://:8080/manager/text/deploy?path=/footoo&tag=footag
これは、tag
属性を使用して以前にデプロイされたウェブアプリケーションをデプロイするために使用できます。Managerウェブアプリの作業ディレクトリには、以前にデプロイされたWARが含まれていることに注意してください。それを削除すると、デプロイが失敗します。
URLでディレクトリまたはWARをデプロイ
Tomcatサーバー上にあるウェブアプリケーションディレクトリまたは".war"ファイルをデプロイします。path
が指定されていない場合、パスとバージョンはディレクトリ名またはWARファイル名から導出されます。war
パラメーターは、ディレクトリまたはウェブアプリケーションアーカイブ(WAR)ファイルのURL(file:
スキームを含む)を指定します。WARファイルを参照するURLのサポートされる構文は、java.net.JarURLConnection
クラスのJavadocページで説明されています。WARファイル全体を参照するURLのみを使用してください。
この例では、Tomcatサーバー上のディレクトリ/path/to/foo
にあるウェブアプリケーションが、/footoo
という名前のウェブアプリケーションコンテキストとしてデプロイされます。
https://:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo
この例では、Tomcatサーバー上の".war"ファイル/path/to/bar.war
が、/bar
という名前のウェブアプリケーションコンテキストとしてデプロイされます。path
パラメーターがないため、コンテキストパスは".war"拡張子なしのウェブアプリケーションアーカイブファイルの名前にデフォルトで設定されることに注意してください。
https://:8080/manager/text/deploy?war=file:/path/to/bar.war
ホストのappBaseからディレクトリまたはWARをデプロイ
ホストのappBaseディレクトリにあるウェブアプリケーションディレクトリまたは".war"ファイルをデプロイします。パスとオプションのバージョンは、ディレクトリ名またはWARファイル名から導出されます。
この例では、TomcatサーバーのホストappBaseディレクトリ内のfoo
というサブディレクトリにあるウェブアプリケーションが、/foo
という名前のウェブアプリケーションコンテキストとしてデプロイされます。使用されるコンテキストパスがウェブアプリケーションディレクトリの名前であることに注意してください。
https://:8080/manager/text/deploy?war=foo
この例では、TomcatサーバーのホストappBaseディレクトリ内にある".war"ファイルbar.war
が、/bar
という名前のウェブアプリケーションコンテキストとしてデプロイされます。
https://:8080/manager/text/deploy?war=bar.war
Context設定".xml"ファイルを使用してデプロイ
ホストのdeployXML
フラグがtrueに設定されている場合、Context設定".xml"ファイルとオプションの".war"ファイルまたはウェブアプリケーションディレクトリを使用してウェブアプリケーションをデプロイできます。Context".xml"設定ファイルを使用してウェブアプリケーションをデプロイする場合、コンテキストpath
は使用されません。
Context設定".xml"ファイルには、Tomcatのserver.xml
設定ファイルで構成されたかのように、ウェブアプリケーションContextの有効なXMLを含めることができます。以下に例を示します。
<Context path="/foobar" docBase="/path/to/application/foobar">
</Context>
オプションのwar
パラメーターがウェブアプリケーションの".war"ファイルまたはディレクトリのURLに設定されている場合、Context設定".xml"ファイルで構成されているdocBaseはすべて上書きされます。
以下に、Context設定".xml"ファイルを使用してアプリケーションをデプロイする例を示します。
https://:8080/manager/text/deploy?config=file:/path/context.xml
以下に、Context設定".xml"ファイルとサーバー上にあるウェブアプリケーション".war"ファイルを使用してアプリケーションをデプロイする例を示します。
https://:8080/manager/text/deploy
?config=file:/path/context.xml&war=file:/path/bar.war
デプロイに関する注意点
ホストがunpackWARs=true
で構成されており、WARファイルをデプロイした場合、WARはホストのappBaseディレクトリ内のディレクトリに展開されます。
アプリケーションのWARまたはディレクトリがホストのappBaseディレクトリにインストールされており、ホストがautoDeploy=true
で構成されている場合、コンテキストパスはディレクトリ名または".war"拡張子なしのWARファイル名と一致する必要があります。
信頼できないユーザーがウェブアプリケーションを管理できる場合のセキュリティのために、ホストのdeployXML
フラグをfalseに設定できます。これにより、信頼できないユーザーが設定XMLファイルを使用してウェブアプリケーションをデプロイすること、およびホストのappBaseの外部にあるアプリケーションディレクトリまたは".war"ファイルをデプロイすることが防止されます。
デプロイ応答
インストールと起動が成功した場合、次のような応答を受け取ります。
OK - Deployed application at context path /foo
そうでない場合、応答はFAIL
で始まり、エラーメッセージが含まれます。考えられる問題の原因には以下が含まれます。
- パス/fooにアプリケーションがすでに存在します
現在実行中のすべてのウェブアプリケーションのコンテキストパスは一意である必要があります。したがって、このコンテキストパスを使用している既存のウェブアプリケーションをアンデプロイするか、新しいウェブアプリケーションに別のコンテキストパスを選択する必要があります。このエラーを回避するために、URLのパラメーターとして
update
パラメーターをtrue
の値で指定することができます。その場合、デプロイメントを実行する前に既存のアプリケーションに対してアンデプロイが実行されます。 - ドキュメントベースが存在しないか、読み取り可能なディレクトリではありません
war
パラメーターで指定されたURLは、このサーバー上にウェブアプリケーションの「展開された」バージョンを含むディレクトリ、またはこのアプリケーションを含むウェブアプリケーションアーカイブ(WAR)ファイルの絶対URLを識別する必要があります。war
パラメーターで指定された値を修正してください。 - 例外が発生しました
新しいウェブアプリケーションを起動しようとしているときに例外が発生しました。詳細についてはTomcatのログを確認してください。考えられる原因としては、
/WEB-INF/web.xml
ファイルの解析に関する問題、またはアプリケーションのイベントリスナーやフィルターの初期化時に不足しているクラスが見つかったことなどが挙げられます。 - 無効なアプリケーションURLが指定されました
指定されたディレクトリまたはウェブアプリケーションのURLは無効でした。このようなURLは
file:
で始まり、WARファイルのURLは".war"で終わる必要があります。 - 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ROOTウェブアプリケーションを参照するには「/」を使用します。
- コンテキストパスはディレクトリ名またはWARファイル名と一致する必要があります
アプリケーションのWARまたはディレクトリがホストのappBaseディレクトリにインストールされており、ホストが
autoDeploy=true
で構成されている場合、コンテキストパスはディレクトリ名または".war"拡張子なしのWARファイル名と一致する必要があります。 - ホストのウェブアプリケーションディレクトリ内のウェブアプリケーションのみインストールできます
ホストの
deployXML
フラグがfalseに設定されている場合、ホストのappBaseディレクトリ外のウェブアプリケーションディレクトリまたは".war"ファイルをデプロイしようとすると、このエラーが発生します。
現在デプロイされているアプリケーションを一覧表示
https://:8080/manager/text/list
現在デプロイされているすべてのウェブアプリケーションのコンテキストパス、現在のステータス(running
またはstopped
)、およびアクティブなセッション数を一覧表示します。Tomcatの起動直後の典型的な応答は次のようになります。
OK - Listed applications for virtual host localhost
/webdav:running:0:webdav
/examples:running:0:examples
/manager:running:0:manager
/:running:0:ROOT
/test:running:0:test##2
/test:running:0:test##1
既存のアプリケーションをリロード
https://:8080/manager/text/reload?path=/examples
既存のアプリケーションに、自身をシャットダウンしてリロードするよう指示します。これは、ウェブアプリケーションコンテキストがリロード可能ではなく、/WEB-INF/classes
ディレクトリ内のクラスやプロパティファイルを更新した場合、または/WEB-INF/lib
ディレクトリにjarファイルを追加または更新した場合に役立ちます。
このコマンドが成功した場合、次のような応答が表示されます。
OK - Reloaded application at context path /examples
そうでない場合、応答はFAIL
で始まり、エラーメッセージが含まれます。考えられる問題の原因には以下が含まれます。
- 例外が発生しました
ウェブアプリケーションを再起動しようとして例外が発生しました。詳細についてはTomcatのログを確認してください。
- 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ROOTウェブアプリケーションを参照するには「/」を使用します。
- パス/fooにコンテキストが存在しません
指定されたコンテキストパスには、デプロイされたアプリケーションがありません。
- コンテキストパスが指定されていません
path
パラメーターは必須です。 - パス/fooにデプロイされたWARではリロードはサポートされていません
現在、WARファイルから直接ウェブアプリケーションがデプロイされた場合、アプリケーションのリロード(クラスまたは
web.xml
ファイルの変更を反映するため)はサポートされていません。これは、ウェブアプリケーションが展開されたディレクトリからデプロイされた場合にのみ機能します。WARファイルを使用している場合、変更を反映させるには、アプリケーションをundeploy
してからdeploy
するか、update
パラメーター付きでdeploy
し直す必要があります。
OSおよびJVMプロパティを一覧表示
https://:8080/manager/text/serverinfo
Tomcatのバージョン、OS、JVMプロパティに関する情報を一覧表示します。
エラーが発生した場合、応答はFAIL
で始まり、エラーメッセージが含まれます。考えられる問題の原因には以下が含まれます。
- 例外が発生しました
システムプロパティを列挙しようとして例外が発生しました。詳細についてはTomcatのログを確認してください。
利用可能なグローバルJNDIリソースを一覧表示
https://:8080/manager/text/resources[?type=xxxxx]
コンテキスト設定ファイルのリソースリンクで使用できるグローバルJNDIリソースを一覧表示します。type
リクエストパラメーターを指定する場合、その値は関心のあるリソースタイプの完全修飾Javaクラス名である必要があります(たとえば、利用可能なすべてのJDBCデータソースの名前を取得するにはjavax.sql.DataSource
を指定します)。type
リクエストパラメーターを指定しない場合、すべてのタイプのリソースが返されます。
type
リクエストパラメーターが指定されているかどうかに応じて、通常の応答の最初の行は次のようになります。
OK - Listed global resources of all types
または
OK - Listed global resources of type xxxxx
各リソースにつき1行が続き、各行はコロン(":")文字で区切られたフィールドで構成されます。以下に示すとおりです。
- グローバルリソース名 - このグローバルJNDIリソースの名前。
<ResourceLink>
要素のglobal
属性で使用されます。 - グローバルリソースタイプ - このグローバルJNDIリソースの完全修飾Javaクラス名。
エラーが発生した場合、応答はFAIL
で始まり、エラーメッセージが含まれます。考えられる問題の原因には以下が含まれます。
- 例外が発生しました
グローバルJNDIリソースを列挙しようとして例外が発生しました。詳細についてはTomcatのログを確認してください。
- グローバルJNDIリソースが利用できません
実行中のTomcatサーバーは、グローバルJNDIリソースなしで設定されています。
セッション統計
https://:8080/manager/text/sessions?path=/examples
ウェブアプリケーションのデフォルトセッションタイムアウト、および実際のタイムアウト時間の1分間隔の範囲内にある現在アクティブなセッションの数を表示します。例えば、Tomcatを再起動し、/examples
ウェブアプリのJSPサンプルの一つを実行した後、次のような結果が得られることがあります。
OK - Session information for application at context path /examples
Default maximum session inactive interval 30 minutes
<1 minutes: 1 sessions
1 - <2 minutes: 1 sessions
セッションの期限切れ
https://:8080/manager/text/expire?path=/examples&idle=num
セッション統計(上記の/sessions
コマンドと同様)を表示し、num
分より長くアイドル状態のセッションを期限切れにします。すべてのセッションを期限切れにするには、&idle=0
を使用します。
OK - Session information for application at context path /examples
Default maximum session inactive interval 30 minutes
1 - <2 minutes: 1 sessions
3 - <4 minutes: 1 sessions
>0 minutes: 2 sessions were expired
実際には/sessions
と/expire
は同じコマンドの同義語です。違いはidle
パラメーターの有無です。
既存のアプリケーションを開始
https://:8080/manager/text/start?path=/examples
停止したアプリケーションに再起動を指示し、再び利用可能にします。停止と開始は、例えば、アプリケーションが必要とするデータベースが一時的に利用できなくなった場合に役立ちます。ユーザーが継続的にデータベース例外に遭遇するのを許容するよりも、このデータベースに依存するウェブアプリケーションを停止する方が通常は良いでしょう。
このコマンドが成功した場合、次のような応答が表示されます。
OK - Started application at context path /examples
そうでない場合、応答はFAIL
で始まり、エラーメッセージが含まれます。考えられる問題の原因には以下が含まれます。
- 例外が発生しました
ウェブアプリケーションを起動しようとして例外が発生しました。詳細についてはTomcatのログを確認してください。
- 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ROOTウェブアプリケーションを参照するには「/」を使用します。
- パス/fooにコンテキストが存在しません
指定されたコンテキストパスには、デプロイされたアプリケーションがありません。
- コンテキストパスが指定されていません
path
パラメーターは必須です。
既存のアプリケーションを停止
https://:8080/manager/text/stop?path=/examples
既存のアプリケーションに、利用不可にするよう指示しますが、デプロイ状態は維持します。アプリケーションが停止中に受信されたリクエストはHTTPエラー404となり、このアプリケーションはアプリケーションリストコマンドで「停止中」と表示されます。
このコマンドが成功した場合、次のような応答が表示されます。
OK - Stopped application at context path /examples
そうでない場合、応答はFAIL
で始まり、エラーメッセージが含まれます。考えられる問題の原因には以下が含まれます。
- 例外が発生しました
ウェブアプリケーションを停止しようとして例外が発生しました。詳細についてはTomcatのログを確認してください。
- 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ROOTウェブアプリケーションを参照するには「/」を使用します。
- パス/fooにコンテキストが存在しません
指定されたコンテキストパスには、デプロイされたアプリケーションがありません。
- コンテキストパスが指定されていません
path
パラメーターは必須です。
既存のアプリケーションをアンデプロイ
https://:8080/manager/text/undeploy?path=/examples
警告 - このコマンドは、この仮想ホストのappBase
ディレクトリ(通常は「webapps」)内に存在するウェブアプリケーションのアーティファクトをすべて削除します。これにより、存在する場合はアプリケーションの.WARファイル、展開形式でのデプロイまたは.WAR展開によって生成されたアプリケーションディレクトリ、および$CATALINA_BASE/conf/[enginename]/[hostname]/
ディレクトリからのXML Context定義が削除されます。単にアプリケーションをサービスから外したい場合は、代わりに/stop
コマンドを使用してください。
既存のアプリケーションに、正常にシャットダウンし、Tomcatから削除するよう指示します(これにより、このコンテキストパスは後で再利用できるようになります)。さらに、この仮想ホストのappBase
ディレクトリ(通常は「webapps」)に存在する場合、ドキュメントルートディレクトリも削除されます。このコマンドは、/deploy
コマンドの論理的な逆です。
このコマンドが成功した場合、次のような応答が表示されます。
OK - Undeployed application at context path /examples
そうでない場合、応答はFAIL
で始まり、エラーメッセージが含まれます。考えられる問題の原因には以下が含まれます。
- 例外が発生しました
ウェブアプリケーションをアンデプロイしようとして例外が発生しました。詳細についてはTomcatのログを確認してください。
- 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ROOTウェブアプリケーションを参照するには「/」を使用します。
- 名前/fooのコンテキストは存在しません
指定した名前のデプロイ済みアプリケーションはありません。
- コンテキストパスが指定されていません
path
パラメーターは必須です。
メモリリークの検出
https://:8080/manager/text/findleaks[?statusLine=[true|false]]
メモリリーク検出診断は、完全なガベージコレクションをトリガーします。本番システムでは、細心の注意を払って使用してください。
メモリリーク検出診断は、ウェブアプリケーションが停止、リロード、またはアンデプロイされた際にメモリリークを引き起こしたかどうかを特定しようとします。結果は常にプロファイラで確認する必要があります。この診断は、StandardHostの実装によって提供される追加機能を使用します。StandardHostを継承しないカスタムホストが使用されている場合は機能しません。
Javaコードから明示的に完全なガベージコレクションをトリガーすることは、信頼できないと文書化されています。さらに、使用されるJVMによっては、-XX:+DisableExplicitGC
のように明示的なGCトリガーを無効にするオプションがあります。診断が正常に完全なGCを実行したことを確認したい場合は、GCロギング、JConsoleなどのツールを使用して確認する必要があります。
このコマンドが成功した場合、次のような応答が表示されます。
/leaking-webapp
応答にステータス行を含めたい場合は、リクエストにstatusLine
クエリパラメーターをtrue
の値で含めてください。
停止、リロード、またはアンデプロイされたウェブアプリケーションの各コンテキストパスのうち、以前の実行からのクラスがまだメモリにロードされており、メモリリークを引き起こしているものは、新しい行に一覧表示されます。アプリケーションが複数回リロードされている場合、複数回一覧表示されることがあります。
コマンドが成功しない場合、応答はFAIL
で始まり、エラーメッセージが含まれます。
コネクターSSL/TLS暗号情報
https://:8080/manager/text/sslConnectorCiphers
SSLコネクター/暗号診断は、各コネクターに現在設定されているSSL/TLS暗号を一覧表示します。
応答は次のようになります。
OK - Connector / SSL Cipher information
Connector[HTTP/1.1-8080]
SSL is not enabled for this connector
Connector[HTTP/1.1-8443]
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
...
コネクターSSL/TLS証明書チェーン情報
https://:8080/manager/text/sslConnectorCerts
SSLコネクター/証明書診断は、各仮想ホストに現在設定されている証明書チェーンを一覧表示します。
応答は次のようになります。
OK - Connector / Certificate Chain information
Connector[HTTP/1.1-8080]
SSL is not enabled for this connector
Connector[HTTP/1.1-8443]-_default_-RSA
[
[
Version: V3
Subject: CN=localhost, OU=Apache Tomcat PMC, O=The Apache Software Foundation, L=Wakefield, ST=MA, C=US
Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11
...
コネクターSSL/TLS信頼済み証明書情報
https://:8080/manager/text/sslConnectorTrustedCerts
SSLコネクター/証明書診断は、各仮想ホストに現在設定されている信頼済み証明書を一覧表示します。
応答は次のようになります。
OK - Connector / Trusted Certificate information
Connector[HTTP/1.1-8080]
SSL is not enabled for this connector
Connector[HTTP/1.1-8443]-_default_
[
[
Version: V3
Subject: CN=Apache Tomcat Test CA, OU=Apache Tomcat PMC, O=The Apache Software Foundation, L=Wakefield, ST=MA, C=US
...
TLS設定のリロード
https://:8080/manager/text/sslReload?tlsHostName=name
TLS設定ファイル(証明書および鍵ファイル。これはserver.xmlの再解析をトリガーしません)をリロードします。すべてのホストのファイルをリロードするには、tlsHostName
パラメーターを指定しないでください。
OK - Reloaded TLS configuration for [_default_]
スレッドダンプ
https://:8080/manager/text/threaddump
JVMスレッドダンプを書き込みます。
応答は次のようになります。
OK - JVM thread dump
2014-12-08 07:24:40.080
Full thread dump Java HotSpot(TM) Client VM (25.25-b02 mixed mode):
"http-nio-8080-exec-2" Id=26 cpu=46800300 ns usr=46800300 ns blocked 0 for -1 ms waited 0 for -1 ms
java.lang.Thread.State: RUNNABLE
locks java.util.concurrent.ThreadPoolExecutor$Worker@1738ad4
at sun.management.ThreadImpl.dumpThreads0(Native Method)
at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:446)
at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:440)
at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:409)
at org.apache.catalina.manager.ManagerServlet.threadDump(ManagerServlet.java:557)
at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:371)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:618)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:725)
...
VM情報
https://:8080/manager/text/vminfo
Java仮想マシンに関する診断情報を書き込みます。
応答は次のようになります。
OK - VM info
2014-12-08 07:27:32.578
Runtime information:
vmName: Java HotSpot(TM) Client VM
vmVersion: 25.25-b02
vmVendor: Oracle Corporation
specName: Java Virtual Machine Specification
specVersion: 1.8
specVendor: Oracle Corporation
managementSpecVersion: 1.2
name: ...
startTime: 1418012458849
uptime: 393855
isBootClassPathSupported: true
OS information:
...
設定を保存
https://:8080/manager/text/save
パラメーターを指定せずにこのコマンドを実行すると、サーバーの現在の設定がserver.xmlに保存されます。既存のファイルは、必要に応じてバックアップとして名前が変更されます。
デプロイされたウェブアプリケーションのパスと一致するpath
パラメーターを指定すると、そのウェブアプリケーションの設定は、現在のホストのxmlBase
にある適切に命名されたcontext.xmlファイルに保存されます。
このコマンドを使用するには、StoreConfig MBeanが存在する必要があります。通常、これはStoreConfigLifecycleListenerを使用して設定されます。
コマンドが成功しない場合、応答はFAIL
で始まり、エラーメッセージが含まれます。
サーバーのステータス
以下のリンクから、サーバーのステータス情報を表示できます。manager-status
ロールまたは他のmanager-xxxロールのいずれかが、このページへのアクセスを許可します。
https://:8080/manager/status
https://:8080/manager/status/all
サーバーのステータス情報をHTML形式で表示します。
https://:8080/manager/status?XML=true
サーバーのステータス情報をXML形式で表示します。XML形式には、ウェブアプリケーションごとの詳細な統計は含まれません。
https://:8080/manager/status?JSON=true
https://:8080/manager/status/all?JSON=true
サーバーのステータス情報をJSON形式で表示します。JSON形式には、スレッドごとの状態情報は含まれません。アクティブな監視やサーバーのステータスアラート(Grafanaなど)のためのクライアント可視化ツールを使用している場合、Managerが提供するJSON出力は、最も簡単で安全なソリューションを提供する可能性が高いです。
まず、サーバーとJVMのバージョン番号、JVMプロバイダー、OS名と番号、そしてアーキテクチャタイプが表示されます。
次に、JVMのメモリ使用量に関する情報があります。
次に、Tomcat AJPとHTTPコネクターに関する情報があります。両方とも同じ情報が利用可能です。
スレッド情報:最大スレッド数、最小および最大スペアスレッド数、現在のスレッド数、現在のビジースレッド数。
リクエスト情報:最大処理時間と処理時間、リクエストおよびエラーカウント、受信バイト数と送信バイト数。
JSON形式を使用しない場合、ステージ、時間、送信バイト、受信バイト、クライアント、VHost、およびリクエストを含むスレッドの状態が表示されます。既存のすべてのスレッドが表に一覧表示されます。考えられるスレッドステージのリストは以下の通りです。
「リクエストの解析と準備」:リクエストヘッダーが解析されているか、リクエストボディを読み取るために必要な準備(転送エンコーディングが指定されている場合)が行われています。
「サービス」:スレッドがリクエストを処理し、応答を生成しています。このステージは「リクエストの解析と準備」ステージの後に続き、「完了」ステージの前に来ます。このステージには常に少なくとも1つのスレッドがあります(サーバーのステータスページ)。
「完了」:リクエスト処理の終了。出力バッファに残っている応答の残りはクライアントに送信されます。このステージの後には、接続を維持するのが適切であれば「Keep-Alive」が続き、適切でなければ「Ready」が続きます。
「Keep-Alive」:クライアントが別のリクエストを送信した場合に備えて、スレッドがクライアントへの接続を維持します。別のリクエストを受信した場合、次のステージは「リクエストの解析と準備」になります。Keep-Aliveタイムアウト前にリクエストが受信されない場合、接続は閉じられ、次のステージは「Ready」になります。
「Ready」:スレッドはアイドル状態であり、使用準備ができています。
/status/all
コマンドを使用している場合、XML形式を除き、デプロイされている各ウェブアプリケーションに関する追加情報が利用可能になります。
JMXプロキシサーブレットの使用
JMXプロキシサーブレットとは
JMXクエリコマンド
これは次の形式を取ります。
http://webserver/manager/jmxproxy/?qry=STUFF
ここでSTUFF
は、実行したいJMXクエリです。例えば、実行したいクエリは次のとおりです。
-
qry=*%3Atype%3DRequestProcessor%2C* --> type=RequestProcessor
。これは、リクエストを処理できるすべてのワーカーを特定し、その状態を報告します。 -
qry=*%3Aj2eeType=Servlet%2c* --> j2eeType=Servlet
。これはロードされたすべてのサーブレットを返します。 -
qry=Catalina%3Atype%3DEnvironment%2Cresourcetype%3DGlobal%2Cname%3DsimpleValue --> Catalina:type=Environment,resourcetype=Global,name=simpleValue
。これは、指定された名前で特定のMBeanを検索します。
その機能を本当に理解するには、これで実験する必要があります。qry
パラメーターを指定しない場合、すべてのMBeanが表示されます。実行できるすべてのクエリをより深く理解するために、Tomcatのソースコードを見てJMX仕様を理解することを強くお勧めします。
JMX取得コマンド
JMXProxyServletは、特定のMBeanの属性の値をフェッチするために使用できる「get」コマンドもサポートしています。get
コマンドの一般的な形式は次のとおりです。
http://webserver/manager/jmxproxy/?get=BEANNAME&att=MYATTRIBUTE&key=MYKEY
以下のパラメーターを指定する必要があります。
get
: 完全なBean名att
: フェッチしたい属性key
: (オプション)CompositeData MBean属性へのキー
すべてがうまくいけば、OKと表示され、そうでない場合はエラーメッセージが表示されます。例えば、現在のヒープメモリデータをフェッチしたいとします。
http://webserver/manager/jmxproxy/?get=java.lang:type=Memory&att=HeapMemoryUsage
または、「used」キーのみが必要な場合
http://webserver/manager/jmxproxy/
?get=java.lang:type=Memory&att=HeapMemoryUsage&key=used
JMX設定コマンド
MBeanをクエリできるようになったので、Tomcatの内部をいじる時です!設定コマンドの一般的な形式は次のとおりです。
http://webserver/manager/jmxproxy/?set=BEANNAME&att=MYATTRIBUTE&val=NEWVALUE
そのため、3つのリクエストパラメーターを指定する必要があります。
set
: 完全なBean名att
: 変更したい属性val
: 新しい値
すべてがうまくいけば、OKと表示され、そうでない場合はエラーメッセージが表示されます。例えば、ErrorReportValve
のデバッグをその場でオンにしたいとします。以下を実行すると、デバッグが10に設定されます。
https://:8080/manager/jmxproxy/
?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost
&att=debug&val=10
そして私の結果は(環境によって異なります)
Result: ok
不正な値を渡した場合に表示されるのはこちらです。私が使用したURLはこれです。デバッグを「cow」に設定しようとします。
https://:8080/manager/jmxproxy/
?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost
&att=debug&val=cow
それを試すと、私の結果はこうなります
Error: java.lang.NumberFormatException: For input string: "cow"
JMX呼び出しコマンド
invoke
コマンドは、MBean上のメソッドを呼び出すことを可能にします。コマンドの一般的な形式は次のとおりです。
http://webserver/manager/jmxproxy/
?invoke=BEANNAME&op=METHODNAME&ps=COMMASEPARATEDPARAMETERS
例えば、ServiceのfindConnectors()
メソッドを呼び出すには、以下を使用します。
https://:8080/manager/jmxproxy/
?invoke=Catalina%3Atype%3DService&op=findConnectors&ps=
Antを使用したManagerコマンドの実行
上記で文書化されているように、HTTPリクエストを介してManagerコマンドを実行する機能に加えて、TomcatにはAnt(バージョン1.4以降)ビルドツール用の便利なタスク定義セットが含まれています。これらのコマンドを使用するには、以下のセットアップ操作を実行する必要があります。
- Antのバイナリディストリビューションをhttps://ant.dokyumento.jpからダウンロードしてください。バージョン1.4以降を使用する必要があります。
- Antディストリビューションを便利なディレクトリにインストールします(本説明の残りの部分ではANT_HOMEと呼びます)。
$ANT_HOME/bin
ディレクトリをPATH
環境変数に追加します。- Tomcatユーザーデータベースに、
manager-script
ロールを含むユーザー名/パスワードの組み合わせを少なくとも1つ設定してください。
Ant内でカスタムタスクを使用するには、まず<import>
要素でそれらを宣言する必要があります。したがって、build.xml
ファイルは次のようになるでしょう。
<project name="My Application" default="compile" basedir=".">
<!-- Configure the directory into which the web application is built -->
<property name="build" value="${basedir}/build"/>
<!-- Configure the context path for this application -->
<property name="path" value="/myapp"/>
<!-- Configure properties to access the Manager application -->
<property name="url" value="https://:8080/manager/text"/>
<property name="username" value="myusername"/>
<property name="password" value="mypassword"/>
<!-- Configure the path to the Tomcat installation -->
<property name="catalina.home" value="/usr/local/apache-tomcat"/>
<!-- Configure the custom Ant tasks for the Manager application -->
<import file="${catalina.home}/bin/catalina-tasks.xml"/>
<!-- Executable Targets -->
<target name="compile" description="Compile web application">
<!-- ... construct web application in ${build} subdirectory, and
generated a ${path}.war ... -->
</target>
<target name="deploy" description="Install web application"
depends="compile">
<deploy url="${url}" username="${username}" password="${password}"
path="${path}" war="file:${build}${path}.war"/>
</target>
<target name="reload" description="Reload web application"
depends="compile">
<reload url="${url}" username="${username}" password="${password}"
path="${path}"/>
</target>
<target name="undeploy" description="Remove web application">
<undeploy url="${url}" username="${username}" password="${password}"
path="${path}"/>
</target>
</project>
注:上記のインポートによるリソースタスクの定義は、Ant 1.7で追加されたリソースデータタイプを上書きします。リソースデータタイプを使用したい場合は、Antのネームスペースサポートを使用してcatalina-tasks.xml
を修正し、Tomcatタスクを独自のネームスペースに割り当てる必要があります。
これで、ant deploy
のようなコマンドを実行してTomcatの実行中のインスタンスにアプリケーションをデプロイしたり、ant reload
でTomcatにリロードさせたりできます。また、このbuild.xml
ファイル内の興味深い値のほとんどは、置換可能なプロパティとして定義されているため、コマンドラインからそれらの値を上書きできます。例えば、実際のマネージャーパスワードをbuild.xml
ファイルのソースコードに含めることはセキュリティリスクと考えるかもしれません。これを避けるには、パスワードプロパティを省略し、コマンドラインから指定します。
ant -Dpassword=secret deploy
タスク出力のキャプチャ
Antバージョン1.6.2以降では、Catalinaタスクは出力をプロパティまたは外部ファイルにキャプチャするオプションを提供します。これらは、<redirector>
タイプの属性の以下のサブセットを直接サポートします。
属性 | 説明 | 必須 |
---|---|---|
output | 出力を書き込むファイルの名前。エラー出力がファイルまたはプロパティにもリダイレクトされていない場合、この出力に表示されます。 | いいえ |
error | コマンドの標準エラーをリダイレクトするファイル。 | いいえ |
logError | この属性は、Antのログにエラー出力を表示したい場合で、出力をファイル/プロパティにリダイレクトしている場合に使用されます。エラー出力は出力ファイル/プロパティには含まれません。errorまたはerrorProperty属性でエラーをリダイレクトした場合、これは効果がありません。 | いいえ |
append | 出力ファイルとエラーファイルを追加するか、上書きするか。デフォルトはfalse です。 |
いいえ |
createemptyfiles | 出力ファイルとエラーファイルは、空であっても作成されるべきか。デフォルトはtrue です。 |
いいえ |
outputproperty | コマンドの出力を格納するプロパティの名前。エラー出力が別のファイルまたはストリームにリダイレクトされていない限り、このプロパティにはエラー出力が含まれます。 | いいえ |
errorproperty | コマンドの標準エラーを格納するプロパティの名前。 | いいえ |
いくつかの追加属性も指定できます。
属性 | 説明 | 必須 |
---|---|---|
alwaysLog | この属性は、キャプチャしている出力をAntのログにも表示したい場合に使用されます。タスク出力をキャプチャしている場合を除き、使用しないでください。デフォルトはfalse です。この属性は、Ant 1.6.3で<redirector> によって直接サポートされる予定です。 |
いいえ |
failonerror | この属性は、マネージャーコマンド処理エラーによってAntの実行が終了するのを避けたい場合に使用されます。デフォルトはtrue です。エラー出力をキャプチャしたい場合はfalse に設定する必要があります。そうしないと、何もキャプチャされる前に実行が終了します。この属性はマネージャーコマンドの実行のみに作用し、誤ったコマンド属性や欠落したコマンド属性は依然としてAntの実行終了を引き起こします。 |
いいえ |
また、埋め込みの<redirector>
要素もサポートしており、input
、inputstring
、inputencoding
を除くすべての属性を指定できます。これらは受け入れられますが、このコンテキストでは意味がないため使用されません。<redirector>
要素の属性の詳細については、Antマニュアルを参照してください。
以下に、この出力リダイレクトサポートの利用方法を示すビルドファイルの抜粋例を示します。
<target name="manager.deploy"
depends="context.status"
if="context.notInstalled">
<deploy url="${mgr.url}"
username="${mgr.username}"
password="${mgr.password}"
path="${mgr.context.path}"
config="${mgr.context.descriptor}"/>
</target>
<target name="manager.deploy.war"
depends="context.status"
if="context.deployable">
<deploy url="${mgr.url}"
username="${mgr.username}"
password="${mgr.password}"
update="${mgr.update}"
path="${mgr.context.path}"
war="${mgr.war.file}"/>
</target>
<target name="context.status">
<property name="running" value="${mgr.context.path}:running"/>
<property name="stopped" value="${mgr.context.path}:stopped"/>
<list url="${mgr.url}"
outputproperty="ctx.status"
username="${mgr.username}"
password="${mgr.password}">
</list>
<condition property="context.running">
<contains string="${ctx.status}" substring="${running}"/>
</condition>
<condition property="context.stopped">
<contains string="${ctx.status}" substring="${stopped}"/>
</condition>
<condition property="context.notInstalled">
<and>
<isfalse value="${context.running}"/>
<isfalse value="${context.stopped}"/>
</and>
</condition>
<condition property="context.deployable">
<or>
<istrue value="${context.notInstalled}"/>
<and>
<istrue value="${context.running}"/>
<istrue value="${mgr.update}"/>
</and>
<and>
<istrue value="${context.stopped}"/>
<istrue value="${mgr.update}"/>
</and>
</or>
</condition>
<condition property="context.undeployable">
<or>
<istrue value="${context.running}"/>
<istrue value="${context.stopped}"/>
</or>
</condition>
</target>
警告:多くの意味をなさず、常に悪い考えですが、Catalinaタスクを複数回呼び出すと、不適切に設定されたAntタスクの依存関係チェーンにより、意図せずとも同じAnt実行中にタスクが複数回呼び出される可能性があります。そのタスクから出力をキャプチャする際には、予期せぬ事態を招く可能性があるため、注意が必要です。
- プロパティにキャプチャする場合、そこには最初の呼び出しからの出力のみが見つかります。なぜならAntのプロパティは不変であり、一度設定されると変更できないからです。
- ファイルにキャプチャする場合、各実行で上書きされ、最後の呼び出しの出力のみが見つかります。ただし、
append="true"
属性を使用している場合は、各タスク呼び出しの出力がファイルに追加されて表示されます。