2010-11-24 12 views
0

私はtomcat6でサーブレットを実行しています。私は次のコードを使ってコマンドを実行します。 ubuntu Runtime.getRuntime()。exec( "/ usr/bin/wine cmd/c some.vbs"); 問題は、tomcat6は "tomcat6"ユーザー、javaコマンドの上に というプログラムを実行しています。したがって、上記のコマンドgetErrorStreamは として返します。 "wine:/home/randeel/.wineはあなたが所有していません" ユーザー "randeel"を使用して "wine"をインストールしました。 これに対応する方法はありますか?java - linuxでコマンドを実行する

ありがとう、 ラナ。

+1

"chmod a + rwx /home/randeel/.wine"を実行すると動作しますか? – PeterMmm

答えて

2

はい:ユーザーを切り替える必要があります。あなたがそうでなければ、それを設定しない限り、sudoは、パスワードの入力を要求されますことを

Runtime.getRuntime().exec("sudo -U randeel /usr/bin/wine cmd /c some.vbs"); 

注意してみてください。

もう1つ、より洗練されたソリューションは、小さなサーバーをネットワーク接続を待つrandeelとして実行することです。コマンドを実行し、ネットワーク接続を介して出力を返します。 java.net.Socketのドキュメントを参照してください。

+0

こんにちは、私はこのコマンド "sudo -l -U randeel/usr/bin/wine cmd/c some.vbs"を実行すると、 "/ usr/bin/wine cmd/c some.vbs"というテキストが出力されます。それに?プログラムは実行されませんでした。私はpasswdを求めないようにsudoersを変更しました。 – rana123

+0

あなたが望む出力が得られるまで、最初にコマンドラインから試してみてください。それが機能するときだけ、Javaコードを動作させてみてください。 –

0

解決策は2つあります。 1. chmod a + xを使用してワインに適切な実行許可を与えます。 2.#1を実行したくない場合は、最初にユーザーを変更してからアプリケーションを実行するコマンドラインを実行する必要があります。 コマンドsu USERNAME は現在のユーザーを変更しますが、パスワードを入力する必要があります。パスワードを入力する端末をエミュレートするには、expectスクリプトを使用できます。

次に、別のユーザーとしてコマンドを実行できます。この方法を使うつもりなら、これらの2つのアクションを実行する短いシェルスクリプトを作成し、javaからこのスクリプトを実行することをお勧めします。

#2はもっと複雑です。 Way#1ははるかに単純なようです。

関連する問題