web-dev-qa-db-ja.com

Java Unixサービスとして実行中

Javaで小さなデーモンを構築しましたが、Unix(Debian 5など)でサービスとして実行したいと思います。 Javaラッパーを使用する可能性があることを読みましたが、実装が簡単な他のオプションはありませんか? xxx Java -jar program.jarなどのUnixコマンドだけを使用することはできませんか?

18
Vilius

シェルを終了してもJavaプログラムを実行したい場合は、次の方法が最も簡単です。

$Nohup Java -jar program.jar &
29
Chaitanya

/etc/init.dに適切なスクリプトを作成し、それを/etc/rcX.dディレクトリにリンクする必要があります。スクリプトは、少なくともstartstop、およびstatusパラメーターをサポートする必要があります。起動時に、おそらくNohup Java <arguments> &を介して、適切な引数を指定してJavaコマンドを実行する必要があります。次に、新しく開始したプロセスのPIDをファイル/var/run/yourservice.pidに保存する必要があります。 stopコマンドは、このPIDファイルを読み取り、このサービスを強制終了する必要があります。詳細はディストリビューションごとに異なります。ほとんどのディストリビューションには、ジョブ全体を簡単にするためのマクロがいくつか用意されています。ディストリビューションの/etc/init.dにある他のサービスの例を確認することをお勧めします。

さらに:サービスがネットワークの他のコンピューターからアクセスされていないが、一部のポートを開いている場合は、ファイアウォールでサービスを利用できないようにします。

サービスが「デリケートな」データを処理する場合は、別のユーザーを追加して、/etc/init.dファイルで適切なSudoコマンドを呼び出すことをお勧めします。

10
iirekm

次のように開始できます。

Java -jar program.jar

Unixデーモンは通常、initによって開始されるか、/etc/init.dまたは/etc/rc.dのスクリプトによって開始され、特定のランレベルで開始されます-通常は/etc/rcX.dのソフトリンクによって開始されます。 (ここで、Xは意図された「ランレベル」であり、通常は3です。

Debianは、init-replacementである「upstart」の使用に移行していると思います。 /etc/initの設定ファイルを使用してジョブを定義し、非常に簡単に記述できます。それをチェックしてください。

デーモンは、従来、stdin、sdtout、およびstderrを閉じ、開始時に「ダブルフォーク」を実行して、セッションから切り離し、処理する必要があるものを処理する準備ができていることを通知します。デーモンが端末から起動されない限り、これは実際には必要ありません。

単純なシェルラッパーでプログラムを開始したい場合。小さなシェルスクリプトを書く必要があります。

#!/bin/sh
/full/path/to/Java -jar /full/path/to/program.jar

...そしてそれを実行可能にします(chmod 755)

4
KarlP

この記事には、Javaアプリケーションをデーモンとして実行するための便利なトリックがいくつか含まれています。

http://barelyenough.org/blog/2005/03/Java-daemon/

または、Apache Commons Daemonプロジェクトを確認することもできますが、これにはネイティブコード(UnixおよびWin32がサポートされています)が必要です。

http://commons.Apache.org/daemon/

2
Grodriguez

Cronジョブを使用して、プログラムをスケジュールできます。起動時にスクリプトを実行する方法の詳細については、 this の記事を確認することもできます。記事に記載されているように、Javaプログラムを実行し、起動時に実行するスクリプトを作成できます。

1
Faisal Feroz