2012-03-07 15 views
1

状況:スタートのJavaのjarファイル

私は、jarファイルサーバPC上(サーバとしてPCの行為)、はA.jar持っているために聞くことが無限ループを実行しますTCPIP接続はクライアントPCです。接続が確立された場合には、クライアントPCサーバPCにzipファイルを送信することができ、はA.jar は、別のフルスクリーン表示のjavaファイルを開始しますこれ、bは、それを解凍し、そのジップでスクリプトを実行します。 ja

はA.jarb.jarがすでに存在する場合は、起動中に b.jar を実行しようとしています。


アプローチ1:

私は(それは無限ループだと、システムが起動中に永遠にハングアップする、はA.jarを開始する/etc/init.d/のでスクリプトを書きました端末の画面で、GUIにも入ることはできません)。正常に起動するには、そのスクリプトを削除するためにシングルユーザーモードで起動する必要があります。


アプローチ2:私はそれが私がサーバPCに接続することができ、接続のために耳を傾け、正常に実行され、デーモンとしてはA.jar を実行するスクリプトを変更し

とzipファイルを送信します。

問題: b.jar

  1. は、実行許可とファイルがすべて正しく設定されている場合にも実行されません。
  2. zipファイルを送信した後、b.jarが実行されました(はデバイスに接続されており、そのデバイスはを有効にしているため)。しかし、端末を介して実行された場合と同様に、全画面表示は表示されません。

私は、このように、それはかもしれない少し複雑なようだが、 b.jar は常に更新され、更新後にするとき、オートスタートなければならないので、そう

を行う理由a.jarを使用して、新しいバージョンfo b.jarを解凍して実行します。

b.jarは、シリアルポートにアクセスする必要があるため、rootとして実行する必要があります。

サーバPCは、このように起動時に b.jar を開始するために必要であり、リモートでを制御し、自動化する必要がある)


質問

は私が知っているかもしれませんさこれを行う良い方法がありますか?または私は何を間違っていたのですか?誰かが起動時に起動するためのより良いスクリプトを表示できますか?

答えて

1

アプローチ1は動作するはずですが、コマンドに&を追加してバックグラウンドでjavaプロセスを実行する必要があります。

しかし、デーモンとしてJavaアプリケーションを実行するための優れたソリューションがあります。上記は簡単な修正と見なすことができます。

3

私はあなたがデーモンとしてアプリケーションを実行したい場合は、最善の解決策は、Apache Jsvcを使用していると思います:

JSVCがより簡単にUNIX上で動作するJava アプリケーションを作るためのライブラリとアプリケーションのセットです。 Jsvcは、アプリケーション (Tomcatなど)がルートとしていくつかの特権操作を実行することを許可します(たとえば、をポート< 1024にバインドします)。次に、特権を持たないユーザにアイデンティティを切り替えます。 Cygwinエミュレーションレイヤーを介してWin32上で実行できますが、Win32 ユーザーは、アプリケーション をWindowsサービスとして実行できるようにprocrunを使用することを好む場合があります。

関連する問題