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 が機能しない理由がまったくわからず、何が問題なのかを伝えるメッセージがまったくありません。
誰か助けてくれませんか?