0

.jar ファイルを実行したいので、コマンドの最後に「&」を付けます (実際には、出力をログに記録する必要はありません。ホストしているリモート サーバーから切断できるようにしたいだけです)私のJavaプログラム、プログラム自体は終了後に結果を保存します)

私は次のようにしますが、バックグラウンドで実行されず、待たされます:

java -Xmx72G -cp //home/arian/rapidminer/lib/rapidminer.jar com.rapidminer.RapidMinerCommandLine -f //home/arian/RMRepository/testRemote.rmp &

なぜそれが機能しないのか考えていますか?

ありがとう、アリアン

4

4 に答える 4

2

「それは私を待たせる」とはどういう意味ですか? ひょっとして、または別のストリームRapidMinerCommandLineから読み取りますか?stdin

バックグラウンドでプロセスを実行し、tty セッションから切断する場合は、次のように使用する必要がありますnohup

nohup java -Xmx.... com.rapidminer.RapidMinerCommandLine &

(最後に覚えておいてください&!)

... 1> /dev/nullの前に追加して、&すべてを無視することができますstdout

また、セッションの切断と再接続を可能にするユーティリティを検討することもscreenできますが、(半) 対話型セッションでより使いやすくなります。

(また、指定している最大ヒープサイズはかなり大きいですか?)

乾杯、

于 2012-11-19T09:53:02.680 に答える
2

JSVC を使用できます。これは、Java アプリケーションをデーモン化するのに興味深いユーティリティです。

http://commons.apache.org/daemon/jsvc.html

実際の開始/停止スクリプトを作成するのに役立つ var pid ファイルが提供されます。

編集:他の解決策、おそらく役立つかもしれません

これは、組み込みシステム上の Slackware Linux 用に私が行った非常に古い開始/停止スクリプトです。

#!/bin/sh

application_start() {
  cd /usr/local/YOURHOME
  /usr/lib/java/bin/java \
        -Xmx72G \
        -classpath //home/arian/rapidminer/lib/rapidminer.jar \
        com.rapidminer.RapidMinerCommandLine \
        -f //home/arian/RMRepository/testRemote.rmp &
  echo -n "Starting App daemon:  $CMDLINE"
  ps -Ao pid,command | grep java | grep com.rapidminer.RapidMinerCommandLine | awk '{print $1}' > /var/run/app.pid
  echo
}

application_stop() {
  echo -n "Stopping DataBaseSynchronizerClient daemon..."
  kill `cat /var/run/DataBaseSynchronizerClient.pid`
  echo
  sleep 1
  rm -f /var/run/DataBaseSynchronizerClient.pid
  killall DataBaseSynchronizerClient 2> /dev/null
}

application_restart() {
  application_stop
  sleep 1
  application_start
}

case "$1" in
'start')
  application_start
  ;;
'stop')
  application_stop
  ;;
'restart')
  application_restart
  ;;
*)
  echo "usage $0 start|stop|restart"
esac
于 2012-11-19T09:55:25.350 に答える
2

なぜうまくいかないのかわかりません。ほとんどのシェルでは、実際にそうすべきです。

いずれにせよ、切断するつもりなら、ジョブをバックグラウンドに置くだけでは十分ではないことに気付くでしょう: 切断すると、コンソールが閉じられ (それだけで多くのプログラムが壊れます)、SIGHUP シグナルが送信されます (これにより、ほとんどのエラーが発生します)。終了するプログラム)。

nohupを使用してプログラムを実行することを検討する必要があります (を使用&)。または、後で戻ってプログラムと対話する必要がある場合、screenまたはbyobu請求書により適している可能性があります. さらに別の方法として、タスクを に追加することもできますcrontab

于 2012-11-19T09:57:00.827 に答える
1

そのままで動作するはずですが、バックグラウンドで実行されている Java にも問題がありました。私の解決策は、screen切り離すことができるシェルを開くことができるユーティリティ (通常、ほとんどの Linux ディストリビューションにインストールされています) を使用することでした。私がよく覚えていれば、コマンドは次のようなものです(ただし、適切なマンページもあります)

screen -S myCustomName # runs a new shell called myCustomName
CTRL + D # detach from the current screen instance
screen -ls # list active screen instances
screen -r myCustomName # reattach to the screen instance.

それがあなたの問題を解決することを願っています。

于 2012-11-19T10:43:16.553 に答える