アプリケーションを起動する(Linux / Unix)

UNIX 上で Java アプリケーションをデスクトップアプリケーションとして、 あるいはバックグランドのデーモンプロセスとして、どちらの形式でも動かすことが可能です。 デーモンとして動かす場合、 Wrapper のインストール、アンインストール、開始、停止、ステータス(状況)のクエリー(問い合わせ)などができる必要があります。 アプリケーションが GUI 環境を持っているか、あるいはコンソール(コマンドウィンドウ)で動作させる仕様なのか、 それ次第でも、どのように動作させるべきか決まってきます。

コマンドベースのスクリプトファイル

スクリプトをセットアップする

Wrapper にシェルスクリプト(sh)を同梱して提供しており、 それを使うことで、Java Service Wrapper でアプリケーションをコントロールし、 確実に開始したり停止したりすることができます。

まず始めに、ご利用のアプリケーションのbin」ディレクトリー に次のスクリプトをコピーしてください。(Wrapper 旧バージョンのスクリプトファイル名:「sh.script.in」)

スクリプトファイル:
{WRAPPER_HOME}/src/bin/App.sh.in

以下のように、アプリケーション名を反映して、スクリプトファイル名を変更します。 (このページ内にある「MyApp」をすべてご利用のアプリケーションに差し替えてください。)

ファイル名の変更例:
/usr/lib/myapp/bin/myapp

次に、エディターで、そのスクリプトを開きます

スクリプトの先頭に Wrapper をどうやって起動させるかを設定するために使用できる複数の変数があります。 各変数の前に、利用方法利用可能な値の説明があります。 ほとんどの場合は、最初にデフォルト値を使ってから必要に応じていくつかの値を変更することも出来ます。

Wrapper バージョン 3.5.37 より、シェルスクリプトは 同じディレクトリーにある、スクリプトと同じベース名で、 '.shconf' 拡張子を持つファイルを探します。 存在しているばあい、そのファイルが実行され、シェルスクリプト内のすべての値をオーバーライドできるようになります。 指定の値を変更する必要がある場合は、「.shconf」ファイル内で変更して、スクリプトファイルを原状に保つことも出来ます。 それをすることで、Wrapper の新しいバージョンへのアップグレードしたい場合は変更点をマージする必要なく、 スクリプトファイルを差し替えるだけで簡単にできます。

スクリプトと「shconf」ファイル名の例:
/usr/lib/myapp/bin/myapp
/usr/lib/myapp/bin/myapp.shconf

メインスクリプトの「INIT INFO」にトークンを差し替える必要がありますのでご注意ください。

### BEGIN INIT INFO
# Provides: @app.name@
# Required-Start: $local_fs $network $syslog
# Should-Start: 
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: @app.long.name@
# Description: @app.description@
### END INIT INFO

スクリプトが、ご利用のアプリケーションを起動させるために使用されていることを反映されるように、シェルスクリプトの2つの変数[APP_NAME]と[APP_LONG_NAME]を変更するのが望ましいでしょう。 もし、「APP_NAME」が設定されていない場合、シェルスクリプトのベース名に戻り、「APP_LONG_NAME」 が設定されていない場合は「APP_NAME」に設定されます。

例:
APP_NAME="myapp"
APP_LONG_NAME="My Application"

このスクリプトは、何も設定変更を必要としませんが、 Wrapper の実行ファイルが同じディレクトリーにあり、かつ、コンフィギュレーションファイル 「wrapper.conf」が 「conf」ディレクトリー(一つ上の階層../conf/wrapper.conf)に あるという前提で進めていきます。 もし、これらのファイルを他の場所に設置したい場合には、 そのスクリプト内の[WRAPPER_CMD]と[WRAPPER_CONF]変数を変更する必要があります。

警告

重要! 処理を進める前に、 そのスクリプトや「.shconf」ファイルや Wrapper 実行ファイルが、 実行可能なビットが設定されていることを確認してください。

注意

そのシェルスクリプト(sh)が 「/var/run」ディレクトリーの中に PID ファイルの作成を試みます。 もし Wrapper を起動しているユーザーが、このディレクトリーに書き込む権限(パーミッション)がなかった場合、 結果としてエラーになります。 その代替え案として、Wrapper 実行ファイルが配置されている同じディレクトリーに、 PID ファイルを書くことで、ほとんどのケースで動作するようになるはずです。 このように変更するためには、そのシェルスクリプト(sh)を開き、 次の行を変更してください:

PIDDIR="/var/run"

上記を以下のようにする:

PIDDIR="./"

コンソール内で動かす

アプリケーションを起動する:

単純にbin/myapp console」を実行することで、 アプリケーションを動かすことができます。 Wrapper がカレントディレクトリーを設定してくれるお陰で、 「bin」ディレクトリー内部から、このスクリプトを実行する必要はありません。

コマンドと出力例:
/usr/lib/myapp/bin/myapp console
My Application 動作中...
wrapper  | --> Wrapper がコンソールとして開始しました
wrapper  | JVM 起動中...
jvm 1    | Wrapper (Version 3.x.x)
jvm 1    |

コンソールコマンドを使って動かしている時、JVM からの出力は、そのコンソールに表示されます。

アプリケーションを終了する:

アプリケーションを終了するには、 コンソール(コマンドウィンドウ)から[CTRL]+[C]のキー操作で、アプリケーションを任意停止します。 これで、アプリケーションはキレイにシャットダウンされます。

標準的なデーモンスクリプト:

ご覧のとおり、コマンドを省略すると、 Wrapper に同梱して提供しているスクリプトは、極めて標準的なデーモンスクリプトで、 [console]、 [start]、 [stop]、 [restart]、 [status]、 [dump] コマンドを受け付ます。

  • start]、 [stop]、 [restart] コマンドは、ほとんどのデーモンスクリプトでは一般的なもので、 Wrapper や、デーモンプロセスとしてのアプリケーションを、コントロールするために使われます。
  • status] コマンドは、Wrapper が現在稼働中かどうか検知するために使われます。
  • console] コマンドは、カレントシェル内で Wrapper を起動し、 [CTRL]+[C]のキー操作でアプリケーションを任意停止することを可能にします。
  • dump] コマンドは、JVM にフルスレッドダンプをさせるように仕向けるために、 Wrapper へ「kill -3」シグナルを送ります。

アプリケーションをデーモンプロセスとして動かす

アプリケーションを開始するには、 [start]コマンドを使い、スクリプトを実行することで、 独立したデーモンプロセスとして、アプリケーションを動かすことができます。

コマンドと出力例:
/usr/lib/myapp/bin/myapp start
My Application動作中...

start]コマンドで動作中には、 tail -f wrapper.logを使い 「wrapper.log」ファイルを閲覧することで、 JVM からの出力を見ることができます。

アプリケーションが独立したプロセスとして動作しているため、 [CTRL]+[C]のキー操作でアプリケーションを任意停止することはできず、 コンソール(コマンドウィンドウ)が閉じられた後でも、そのまま引き続き、動作を継続します。

アプリケーションを停止するには、stop]コマンドを使い、スクリプトを実行します。

コマンドと出力例:
/usr/lib/myapp/bin/myapp stop
TestWrapperサンプルアプリケーションを停止中...
TestWrapperサンプルアプリケーションを停止しました。

リブート(再起動)でスタートするようにアプリケーションをインストールする

Wrapper バージョン3.4.0で導入され、 シェルスクリプトは、異なるプラットフォーム(Linux ディストリビューション、或いはその他の Unix システム)で Wrapper をデーモンとしてインストールする方法を統一し、システムの起動時または再起動時にアプリケーションが 自動的に起動するようにします。

スクリプト出力例:
sudo bin/testwrapper install
[sudo] password for tanuki: 
Ubuntuを検知しました:
 Installing service testwrapper from current directory /home/tanuki/wrapper/bin
 Adding system startup for /etc/init.d/testwrapper ...
   /etc/rc0.d/K20testwrapper -> ../init.d/testwrapper
   /etc/rc1.d/K20testwrapper -> ../init.d/testwrapper
   /etc/rc6.d/K20testwrapper -> ../init.d/testwrapper
   /etc/rc2.d/S20testwrapper -> ../init.d/testwrapper
   /etc/rc3.d/S20testwrapper -> ../init.d/testwrapper
   /etc/rc4.d/S20testwrapper -> ../init.d/testwrapper
   /etc/rc5.d/S20testwrapper -> ../init.d/testwrapper

インストール中に、スクリプトが自動的に OS(Linux ディストリビューションや他の Unix プラットフォーム)を検出し、 どのサービス管理ツール(Systemd、Upstart、 Initd)が存在しているか把握します。 複数のサービス管理ツールが存在している場合、最先端のものが選択されます。 例えば、Linux 上ですと、「systemd」は「upstart」よりも優先され、「upstart」は「initd」よりも優先されます。 インストール中に、スクリプトは自動的にご利用の OS(Linuxプラットフォームでディストリビューション)を検知して、 存在するサービス管理ツール(Systemd、Upstart、Initd 等)を解析します。 複数のサービス管理ツールが存在している場合、高度な機能をもつものが選択されます。 この動作は、バージョン 3.5.31 より導入され、スクリプトの先頭辺りにある、 次の行編集して変更できます。

SERVICE_MANAGEMENT_TOOL=auto

例えば、「Systemd」や「Upstart」より、「initd」を強制的に使用したい場合は次の通りに設定できます。

SERVICE_MANAGEMENT_TOOL=initd

注意

「SERVICE_MANAGEMENT_TOOL」を有効にするためにデーモンを再インストールする必要があります。

注意

スクリプト自身がその OS にインストールされるため、ルートユーザーとして、インストール(またはアンインストール) コマンドを実行することが必要です。

FreeBSD や MacOSX ユーザーや Linux 上で「launchd」や「initd」を使用している場合、 「install」コマンドはブートプロセス中にオペレーティングシステム管理がスクリプトをどのように取り扱うかをコントロールする デフォルトコンフィギュレーションファイルを作成します。

コンフィギュレーションファイルを単に「bin」ディレクトリーに 置くことで、このステップをカスタマイズすることは可能です。

  • MacOSX 上で、ファイル名を「{スクリプトのファイル名}.plist」にしなければなりません。
  • FreeBSD上、或いは Linux 上で Upstart 用には、「{スクリプトのファイル名}.install」です。
  • Systemd」用には、「{スクリプトのファイル名}.service」です。

例えば、もしスクリプトが「testwrapper」とコールされた場合、 MacOSX 上で「testwrapper.plist」を探すでしょうし、 FreeBSD 上や Upstart では「testwrapper.install」を探し、 Systemd では「testwrapper.service」を探すでしょう。

もしシステム初期化から Wrapper のアンインストール(取り外し)を希望するならば、 アクションパラメータ「remove」を渡して (ルートユーザーとして!)スクリプトを実行してください。 これで最初に動作している Wrapper アプリケーションを停止して、最後に初期化から取り外してキレイにします。

出力例:
sudo bin/testwrapper remove
[sudo] password for tanuki: 
TestWrapper サンプルアプリケーションを停止中...
TestWrapper サンプルアプリケーションを停止しました。
Ubuntu を検知しました:
 Removing service testwrapper from current directory /home/tanuki/wrapper/bin
 Removing any system startup links for /etc/init.d/testwrapper ...
   /etc/rc0.d/K20testwrapper
   /etc/rc1.d/K20testwrapper
   /etc/rc2.d/S20testwrapper
   /etc/rc3.d/S20testwrapper
   /etc/rc4.d/S20testwrapper
   /etc/rc5.d/S20testwrapper
   /etc/rc6.d/K20testwrapper

Wrapper バージョン 3.4.0 より以前の古いバージョンをインストールするには手動で操作しなければなりません。 もし、該当するプラットフォームがない場合でも、とりあえず一通り読んで、必要に応じて適用してください。 何か新しい発見があったら、 wrapper-user@lists.sourceforge.net メーリングリスト宛てに、是非ご一報ください。 次回の公開リリース版に追加できれば嬉しく思います。

スタンドアローンバイナリ

Java Service Wrapper から提供されているスクリプトを使う代わりに、 直接、Wrapper を起動することを選ぶこともできます。

Wrapper の使い方

もし、パラメータを付けずに、あるいは、-?を付けて 「wrapper」ファイルを実行すると、 以下のように、使い方の出力が表示されます。

出力例:
Java Service Wrapper Professional Edition 64-bit {version}
  Copyright (C) 1999-{year} Tanuki Software, Ltd. All Rights Reserved.
    https://wrapper.tanukisoftware.com

使い方:
  ./wrapper <コマンド> <コンフィギュレーションファイル> [コンフィギュレーションプロパティ] [...]
  ./wrapper <コンフィギュレーションファイル> [コンフィギュレーションプロパティ] [...]
     (<コマンド> 暗黙的に '-c')
  ./wrapper <コマンド>
     (<コンフィギュレーションファイル> 暗黙的に 'wrapper.conf')
  ./wrapper
     (<コマンド> 暗黙的に '-c' や <コンフィギュレーションファイル> 'wrapper.conf')
     
該当する<コマンド>は次のどれか:
  -c  --console コンソールアプリケーションとして動かします
  -h  --hostid  このホストにライセンスを関連付けるために利用できる HostId を表示します。
  -v  --version Wrapper のバージョン情報を表示します
  -?  --help    このヘルプメッセージを表示します
  -- <args>     Wrapper 引数の終わりにマーク。「--」の後の引数は修正せずに
                全部そのまま Java アップリケーションに渡します。
                
使用する<コンフィギュレーションファイル> は「wrapper.conf」です。名前は、
  ./wrapper の場所への絶対参照か相対参照でなければなりません

「コンフィギュレーションプロパティ」は、コンフィギュレーション名と値の組み合わせで、
  wrapper.conf に値を上書きします。例:
  wrapper.debug=true
  
  Wrapper 実行ファイルの配置場所へのファイル参照は、絶対参照あるいは相対参照
  でなければなりませんので、注意してください。

Wrapper をシェル内で動かす

シェルとして Wrapper を動かすために、-c]コマンドに続いて、 「wrapper.conf」ファイルを指定する必要があります。 「wrapper.conf」ファイルの配置場所は、 絶対パスか相対パスで設定することができます。 もし、相対パスが利用されている場合、そのパスは、カレントディレクトリーではなく、 常に「wrapper」ファイル場所への相対参照です。

コマンド例:
/usr/lib/myapp/bin/wrapper -c ../conf/wrapper.conf

アプリケーションをデーモンプロセスとして起動する

アプリケーションをデーモンプロセスとして起動するためには、wrapper.conf ファイルに続いて、wrapper.daemonize=TRUE を追加してください。 しかし、シェルスクリプトを使用することをお勧めします。

コマンド例:
/usr/lib/myapp/bin/wrapper -c ../conf/wrapper.conf wrapper.daemonize=TRUE

参照: Wrapper でアプリケーションを起動する