0

Java ランタイムから perl スクリプトを呼び出そうとしています。次のコードを使用して、windows7 ラップトップで正常に動作しました。

try {
    String cmdString= "c:\\perl64\\bin\\perl.exe c:\\perl64\\eg\\userinput.pl \""+arg1+"\" \""+arg2+"\"";
    Process p = Runtime.getRuntime().exec(cmdString);
} catch(IOException e) {
    System.out.println(e);
}

perl スクリプトが実行され、期待どおりのものが生成されます (データベースの更新)。

全体をリモートの CentOS サーバーに移動すると、機能しなくなります。スクリプトは同じで、Java コードは、

try {
    String cmdString= "/opt/lampp/bin/perl /home/support/scripts/userinput.pl \""+arg1+"\" \""+arg2+"\" > /tmp/userinput.log";
    log(cmdString);
    Process p = Runtime.getRuntime().exec(cmdString);
} catch(IOException e) {
    System.out.println(e);
}

スクリプトが機能していないことを確認した後、/tmp/userinput.log へのリダイレクトを追加しました。ただし、ログ ファイルはまったく作成されません。また、ログを追加して、Java コードのこの部分が実行されたことを確認しました。実際に実行されました。また、comString の前に「/bin/bash」を追加しようとしましたが、違いはありませんでした。ただし、コマンド ラインからリモート サーバーで cmdString を直接実行すると、問題なく動作します。

ここで、cmdString を「touch /tmp/userinput.log」に変更すると、空のログ ファイルが作成されます。

したがって、Runtime.getRuntime().exec(cmdString) コマンドが実行され、コマンドラインに入力すると cmdString が機能し、単純な「タッチ」コマンドがこのセットアップで機能することがわかりました。しかし、perl スクリプトを呼び出す実際の cmdString が機能しない理由がまったくわからず、何が問題なのかを伝えるメッセージがまったくありません。

誰か助けてくれませんか?

4

1 に答える 1

1

最初に、コマンドの各パラメーターを分離し、を使用するバージョンの exec を使用しますString[](引用の問題について心配する必要はありません)。また、Java はシェルを実行していないため、シェルのリダイレクトは機能しません。

于 2013-10-05T00:59:40.507 に答える