jsvcを使用してLinuxアプリケーションとして実行するJavaアプリケーションを取得しようとしています。私はHow to convert a java program to daemon with jsvc?を見つけましたが、ほとんどの方法で私を得ることができましたが、私はクラスパスを理解するためにまだ苦労しています。jsvcクラスパスで複数のjarファイルを使用する
私はstderrに次のエラーを取得しています:
19/04/2013 10:43:18 12233 jsvc.exec error: Cannot find daemon loader org/apache/commons/daemon/support/DaemonLoader
19/04/2013 10:43:18 12231 jsvc.exec error: Service exit with a return value of 1
ランタイムがコモンズ-daemon.jarを見つけることができないことと思われます。
私のアプリケーションは、アプリケーション自体が単一のjarファイル内にあり、依存関係(commons-daemonを含む)がlibディレクトリにあるように構成されています。
- daemon-script.sh
- myapp.jarのlib /コモンズ-daemon.jar
- のlib /その他-瓶
ここでは私のdaemon-の関連する部分でありますscript.sh:
LIB_DIR=$(pwd)/lib/*
CLASS_PATH=$(pwd)/myapp.jar
$EXEC -home $JAVA_EXEC -cp $CLASS_PATH:$LIB_DIR -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS
私は多くのバリエーションを試しました:相対パス、指定fically lib/commons-daemon.jar、ワイルドカードなどを参照していません。誰かがこの作業を正しく行う方法を知っていますか?
また、myapp.jarは、(主にテスト目的のために、はい、私はまだそれがサービスとして実行する必要があります)自己実行可能なjarファイルあるので、MANIFEST.MFは、クラスパスとメーンが含まれていますクラス属性。 jsvcにマニフェストを認識させる方法はありますか?
私のマイレージはjsvc 1.0.8(Ubuntuで)を使って変わりました。 jsvcはワイルドカードを尊重したり、lib/dirを指定したりすることはありません。代わりに、クラスパスを明示的に "CLASS_PATH = $(echo" $ LIB_PATH "/ *。jar | tr '' ':')"を使って構築しなければなりませんでした。 私はまた、-Dlog4j.configurationを指定しようとしていました。私は通常、プロパティファイルへの絶対パスを指定するだけですが、jsvcで動作させるには、file:///という接頭辞を付けたURLとして記述する必要がありました。 私はまもなくRHELでテストします。 – ayang