0

次のようなシェルスクリプトtest.shがあります。

cat /home/tomcat/temp/tempLogFile.log > /home/tomcat/temp/logFile_test.log

Runtime.getRuntime()。exec( "test.sh")によってJavaからtest.shを呼び出します

logFile_test.logが作成されますが、何も書き込まれません。

スクリプトをシェルから直接実行すると、正常に機能します。何がうまくいかない可能性がありますか?

ありがとう、

更新:興味深いことに、私がそうすればそれはうまくいきます

echo 'cat /home/tomcat/temp/tempLogFile.log > /home/tomcat/temp/logFile_test.log' | at now

でもat now猫が終わるのを待つ必要があるので使えません

4

2 に答える 2

0

コマンド パスが間違っている可能性があります。このコマンドは、プログラムを実行できない場合でも logFile_test.log を作成しますcat。次のようなものを追加してみてください:

set > /tmp/dump.txt

シェルスクリプトに。これにより、プロセスの環境変数のコピーが に書き込まれ/tmp/dump.txtます。それらを調べると、問題を解決するのに役立つ場合があります。

別の可能性として、ディスクがいっぱいです。その場合、空のファイルを作成することはできますが、データを書き込むことはできません。

于 2012-08-17T01:33:50.667 に答える
0

を呼び出すとgetRuntime().exec("ANY_COMMAND");、プロセス オブジェクトを使用してプロセスのインスタンスが返されます。プロセス オブジェクトを使用して、入力ストリームと出力ストリームを取得し、他のコマンドを同じプロセスに渡すか、出力を読み取ることができます。そのために、3 つのストリームが接続されています。

  1. 出力ストリーム :- より多くの引数またはコマンドを同じプロセスに送信するための制御を提供します
  2. 入力ストリーム:- プロセスの stdout から値を読み取るための制御を提供します
  3. エラー ストリーム :- コマンドの実行中に発生したすべてのエラーを表示します。

エラーが発生した場合でも、エラー ストリームをチェックして何が問題なのかを確認できます。

Java process.getInputStream() には読み取るものがなく、デッドロックの子を参照することができます

于 2012-08-17T02:20:21.190 に答える