HOWTO: UNIXで複数のWrapperインスタンスを実行する方法

対応バージョン :1.0.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版
対応プラットフォーム :Windows (未対応)Mac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

Wrapperでは、同じシステム上で特別な設定を必要とせず、複数のインスタンスを簡単に動かせるように設計されています。 これは、それぞれのアプリケーションごとにそれぞれのディレクトリーで、 時にアプリケーション名と同じディレクトリーで動作している個別のアプリケーションに依存しています。 混乱を避けるために一番良いのは、異なるディレクトリーで動作させるときでも、 それぞれのアプリケーションごとに名前を持たせるのが良いでしょう。

Wrapperでインテグレーションされた典型的な動作アプリケーションは、 次のようなディレクトリー構造を持っています:

典型的なWrapperディレクトリー構造:
$APP_HOME/
  bin/
    wrapper
    myapp.sh
    myapp.pid
  lib/
    libwrapper.so
    wrapper.jar
    myapp-*.jar
  conf/
    wrapper.conf
  logs/
    wrapper.log

この例では、「myapp.sh」は Wrapper配布に同梱されたシェルスクリプト 「$WRAPPER_HOME/src/bin/App.sh.in」のコピーです。(Wrapper の旧バージョンのファイル名:「sh.script.in」) 下記のように、このスクリプトにはアプリケーション用に設定される変数ブロックが含まれています:

コンフィギュレーション変数スクリプトのサブセット:
# Application
APP_NAME="myapp"
APP_LONG_NAME="My Application"

# Wrapper
WRAPPER_CMD="./wrapper"
WRAPPER_CONF="../conf/wrapper.conf"

# Location of the pid file.
PIDDIR="."

# When installing on On Mac OSX platforms, the following domain will be used to
#  prefix the plist file name.
PLIST_DOMAIN=com.myco.myapp

このスクリプトが動作するとき、どの相対パスもシェルスクリプトの配置場所に対する相対的な位置です。 (しかしながら、Wrapper自身が起動される場合には、Wrapperバイナリの場所にその作業ディレクトリーが設定されます)

Wrapperが起動されるとき、PIDファイル"$PIDDIR/$APP_NAME.pid"」 (この例の場合「myapp.pid」)へ書き込みます。 このファイルは後にシェルスクリプトによって利用され、これでWrapperプロセスが動作しているかを判断します。 その「$PIDDIR」はデフォルトでシェルスクリプトと同じディレクトリーです。

シェルスクリプトの設定状況次第ですが、 Wrapperは、同じネーミングパターンで次のファイルを利用することもあります:

  • $PIDDIR/$APP_NAME.anchor,
  • $PIDDIR/$APP_NAME.command,
  • $PIDDIR/$APP_NAME.status,
  • $PIDDIR/$APP_NAME.java.status,
  • $PIDDIR/$APP_NAME.anchor

また、一部のUNIXプラットフォームではロックディレクトリー「/var/lock/subsys」を定義します。 ディレクトリーが存在していて書き込み可能なとき、Wrapperもまた ロックファイル「/var/lock/subsys/$APP_NAME」へ書き込みます。 このロックファイルを利用することで、そのプラットフォームで現在どのサービスが動作中かを判断します。 ルールとして、異なるディレクトリーに配置されていたとしても、同じ名前で複数のアプリケーションを動作させないためには良いアイデアです。 もし、そうしないと、最後に開始されたアプリケーションがロックファイルを上書きして、 最初に開始していたアプリケーション用のロックファイルが削除され、シャットダウンされます。 これはWrapperのシェルスクリプトには影響ありませんが、他の管理ソフトで問題を引き起こす可能性があります。

もし物理的に同じWrapperバイナリを使って2つのアプリケーションを動作させたい場合には、 両者とも同じ作業ディレクトリーで動作させてください。 つまり、2つのアプリケーションが異なるアプリケーション名($APP_NAME)で 異なるシェルスクリプトを持っていることを確認する必要があり、 また異なる「wrapper.conf」ファイルを利用してください。 コンフィギュレーションファイルの中身もまたチェックする必要があるでしょう。 2つのアプリケーションが個別に[wrapper.logfile]プロパティで 異なるログファイルを利用するように設定してください。

wrapper.working.dir]プロパティを利用して、 各コンフィギュレーションファイルでそれぞれのアプリケーションが動作する場所(作業ディレクトリー)を設定することも可能です。 もしこのルートを利用する際には、混乱しないように、そのプロパティの説明を熟読してください。