7

jsvcJava サービスをデーモンとして起動するために活用するアプリケーションを作成しています。jsvcアプリケーションが 1024 未満のポートを使用しているにもかかわらず、作成されたファイルが別のユーザーによって所有されるように、root として実行したくないため、次のようなものを使用する必要があります。jsvcまた、クライアントが必要とするのは JVM とインストールされたバイナリのみになるように、依存関係と構成を最小限に抑えたいと考えています。

ただし、jsvc1 つの大きな問題があるようです。特定の Unix オペレーティング システムで Java のホーム フォルダーを検出できないため、非常にイライラします。

$ ./startup.sh
Cannot locate Java home

少なくとも手動で JVM ホーム ディレクトリを設定することで、Ubuntu の問題を回避できました。

jsvc ... -home /usr/lib/jvm/default-java/ ...

ほとんどの Unix/Linux で動作するように、Bash スクリプトから Java ホーム ディレクトリを動的に決定する方法はありますか? 次のようなことをすると、夜はぐっすり眠ることができます。

JAVA_HOME="$( ... )"

jsvc ... -home "$JAVA_HOME" ...

...個々のオペレーティング システムごとにハードコーディングするのではなく、バイナリを指定して、javaその JVM/JRE のホーム ディレクトリを見つける方法はありますか?

4

4 に答える 4

5

これが *nix で機能するかどうかはわかりませんが、次の解決策が見つかりました。

JAVA_HOME="$( readlink -f "$( which java )" | sed "s:bin/.*$::" )"

Ubuntu でテストしたところ動作しますが、OSX では動作しません。

于 2012-08-30T22:32:11.400 に答える
3

私の解決策は、メインの jsvc ページが http://commons.apache.org/proper/commons-daemon//jsvc.htmlにあるように、ネイティブ Linux ソースをコンパイルすることでした。

これが私の段階的な手順です

ダウンロード www.fightrice.com/mirrors/apache/commons/daemon/source/commons-daemon-1.0.13-src.tar.gz

ファイルを解凍したら、...../commons-daemon-1.0.13-src/src/native/unix に移動します。

ターミナルでルートとして次の操作を行います。

$ サポート/buildconf.sh

$ ./configure --with-java=/usr/lib/jvm/default-java

$メイク

生成された jsvc バイナリ アプリのテスト

$ ./jsvc -help

できます!きれいに。

于 2013-02-27T18:26:08.720 に答える
0

dirnameおよびコマンドを使用しwhichて、Java の bin ディレクトリを検索します。

echo `dirname \`which java\``
JAVA_HOME=`dirname \`which java\``

... Java がすでに にある場合にのみ機能し$PATHます。

于 2012-08-30T22:16:00.197 に答える
0

もう1つの方法は次のとおりです。

 type -p java

これにより、正しい JAVA インストール フォルダーが返されることが期待されます。

于 2016-03-27T21:03:50.023 に答える