
Javaからコマンドを実行しても正常に処理が行われません。
Javaは1.8、CentOs7上のEclipse4.7.3で開発を行っています。
Javaからのコマンドは「sh /xxx/test.sh」といった内容です。
test.shはあるツールに対して指示をだすような内容で、
複数のコマンドを連続で実行することで1つの完結した処理となります。
例)
1.ツール起動
2.ツールへ設定
3.ツールの実行
4.ツールの結果出力
5.ツール終了指示
CentOsのターミナルから上記shをコマンド実行したら1~5の順に正常に処理が行われますが、
Javaコマンドの場合、getErrorStream()で標準エラーを見ると1~5のそれぞれのコマンドが正常に処理されていないまま一気に実行されているように見えます。
shのコマンド自体はターミナルでは正常に動作するため、問題ないと考えています。
また、Javaのコマンド実行プログラムは以下の通りです。
ProcessBuilder pb = new ProcessBuilder("sh", "/xxx/test.sh"); Process p = pb.start(); InputStream stdErr = p.getErrorStream(); int c; while ((c = stdErr.read()) != -1) { System.out.println((char)c); } stdErr.close(); p.waitFor();
上記プログラムで「java -version」といったコマンドを試しましたが、正常に動作しました。
ご助力願いますでしょうか?
追記--------------------
質問を書きながらいろいろ試していたときに
Javaから実行するコマンドに権限が足りないかもと思えてきました。
※権限がないユーザでログインしています。
※ターミナルでのsh実行時はsuを行っています。
権限付きでJavaからコマンドを実行するにはどうしたらよいでしょうか?
少し調べて出てきた以下2パターンを試しましたが上手くいきませんでした。
ProcessBuilder pb = new ProcessBuilder("sudo", "sh", "/xxx/test.sh"); ProcessBuilder pb = new ProcessBuilder("su", "sh", "/xxx/test.sh");
回答1件
あなたの回答
tips
プレビュー