問題タブ [apache-commons-exec]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Apache Commons Exec を使用する場合、標準出力と標準エラーを別々に収集するにはどうすればよいですか?
以下のコードは、stdout か stderr かに関係なく、すべての出力を取得します。
両方のストリームを別々に取得するにはどうすればよいですか?
java - Apache Commons Exec - スレッドが Linux でローカル ファイルを開くことができない場合がある
警告 -- 原因はファイルの欠落ではありません -- すべてのスレッドが同じスクリプト ファイルを呼び出しています
Red Hat ボックスでローカル スクリプトを呼び出す 5 ~ 6 のスレッドを開始しています。
時々、次のエラーメッセージが表示されることに気付きました
明らかに、すべてのプロセスがスクリプトを実行しているため、[1] OS がスクリプトを実行したり、読み取りのためにファイルにアクセスしたりできる同時プロセスに制限があるか、[2] Java が何らかの操作を実行しようとしていることに関連しているようです。準備ができていないストリーム (commons-exec がこれを処理してくれると想定していました)
これがコードです
エラーが [1] の場合、Linux OS でこの制限を緩和する方法を知りたい
エラーが [2] の場合、commons-exec にリソースの準備が整うのを待つように指示する方法を知りたいです (最悪の場合、再試行を追加するだけですが、これはあまり役に立たないと思います)。エレガント)
エラーが別のものである場合、少なくとも原因を知っていれば、解決策を見つけるのに十分です。
更新 - 3 月 15 日
さて、これが問題です。
このスクリプトは、ライブラリを使用して Java クラスを呼び出す Expect スクリプトです。
私が気づいたことの 1 つは、データベース接続を作成する Java メソッドを呼び出すまで、スクリプトが正常に動作することです。
スレッド数が少ない(3~5)ので、データベースには問題ないと思います。代わりに、Javaコードが呼び出されている間、および/またはJavaコードがデータベース接続を作成している間に、何かがスクリプトの呼び出しをブロックしているように思えます。
私はまだ正確な例外を取得しようとしていますが、期待スクリプトは次のようになります (一種)
pullNextInputData は次のようになります
getConnection() は、通常のドライバーのインスタンス化コードです (Apache dbutils を使用します)。
スタックトレースを取得したらすぐにここに配置します
更新 - 3 月 16 日
スタックトレースはあまり言いません:-(
java - Windowsでapache.commons.execを使用してパラメーター付きのシェルスクリプトを実行する
実行する Java 近似を使用して実装された apache-commons-exec を使用してスクリプトを実行しようとしています。このスクリプトは実稼働サーバー (Linux) で実行されますが、ローカルホストでテストして、すべてが正常に機能することを確認する必要があります。
cygwin を起動するコードは次のとおりです。このコードは cmd.exe で機能しますが、commons.exec を使用して起動しようとすると機能しません。
1 を返し、出力もログエラーもありません。
何か足りないものはありますか?出力を適切にキャッチするにはどうすればよいですか?
java - apache commons-exec jar を使用して cmd を開こうとするとエラーが発生する
Apache commons-exec から mysql ダンプを実行しようとすると、次のエラーが発生します
スレッド "main" での例外 java.io.IOException: プログラム "cmd.exe \c" を実行できません (ディレクトリ "." 内): CreateProcess エラー = 2、システムは java.lang.ProcessBuilder.start で指定されたファイルを見つけることができません(ProcessBuilder.java:470) で java.lang.Runtime.exec(Runtime.java:593) で org.apache.commons.exec.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:61) で org.apache.commons. org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:336) の exec.DefaultExecutor.launch(DefaultExecutor.java:279) org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166) のorg.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:153) で com.etq.e2mc.platform.windows.WindowsProcess.execCommons(WindowsProcess.java:87) で com.etq.e2mc.platform.windows.WindowsProcess.main(WindowsProcess.java:79) 原因: java.io.IOException: CreateProcess エラー = 2、java.lang.ProcessImpl.create(Native Method) で指定されたファイルが見つかりません。 lang.ProcessImpl.(ProcessImpl.java:177) at java.lang.ProcessImpl.start(ProcessImpl.java:28) at java.lang.ProcessBuilder.start(ProcessBuilder.java:452) ... 8 詳細
これは私が使用しているコードであり、非常にシンプルで簡単ですが、cmd を呼び出さない理由がわかりません (注: cmd を使用せずに mysql ダンプを直接呼び出してみると、同じタイプのエラーが発生します)、助けていただければ幸いです