簡體   English   中英

Unix腳本在Java Process Runtime.exec()中不起作用

[英]Unix Script not working in Java Process Runtime.exec()

我正在Spring Web MVC中開發應用程序,我需要在其中執行一些linux腳本。

我正在使用tomcat 5.5版在Linux中運行我的項目。

我的代碼看起來像這樣:

Process proc = runtime.exec("sudo cp /var/tmp/mailserverfiles/editinterface.txt /etc/sysconfig/network-scripts/editinterface.txt");
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String line;
while ((line = bufferedreader.readLine()) != null) {
    System.out.println("\nOUTPUT = " + line);
}
System.out.print("\nbefore execute6");
try {
    if (proc.waitFor() != 0) {
       System.err.println("\nexit value = " + proc.exitValue());
    }
} catch (InterruptedException e) {
       System.err.println("\nERROR = " + e);
}

在這里,我想使用linux腳本將特定文件從一個位置cp到另一個位置。

但是當我執行這部分時,我得到了

exit value = 1

作為輸出..我也試圖將此腳本放入.sh文件,並嘗試從Java Code在此處執行該Shell腳本,但是我得到的結果是相同的。

誰能告訴我,這是什么原因?

提前致謝..

我猜想sudo需要一個交互式終端來要求輸入密碼。 由於沒有交互式終端,它將向stderr打印一條錯誤消息,並以退出代碼1退出。您沒有讀取錯誤流,因此不會看到任何可能打印的消息。

在任何情況下,您都絕對希望讀取錯誤流。 現在這樣做將幫助您診斷此時出了什么問題。

我假設運行Tomcat的用戶可以不受限制地訪問sudo? 而且沒有提示您輸入密碼嗎?

嘗試執行命令時,搜索路徑可能很奇怪,並且找不到“ cp”和“ sudo”。

您可以嘗試以下方法來找出問題所在:

  • 嘗試運行不帶“ sudo”的“ cp”命令。

  • 嘗試提供命令的完整路徑名。 這樣可以避免搜索路徑問題。

  • 默認情況下,“ sudo”使用syslog(3)記錄失敗的命令。 查看是否可以在相應的日志文件中找到跟蹤。

假設您可以從命令行運行命令,以tomcat用戶身份登錄-試試

ProcessBuilder pb = new ProcessBuilder("/usr/bin/sudo", "cp", 
                    "/var/tmp/mailserverfiles/editinterface.txt", 
                    "/etc/sysconfig/network-scripts/editinterface.txt");
pb.redirectErrorStream(true);
Process proc = pb.start();
... rest of code as before

如果仍然失敗,請開始調試。 strace應該會有所幫助。 例如,從Java應用程序運行此Shell腳本,並找出/tmp/trace.txt文件中失敗的地方:

#!/bin/sh

strace -f sudo cp /var/tmp/mailserverfiles/editinterface.txt /etc/sysconfig/network-scripts/editinterface.txt  >/tmp/trace.txt 2>&1

盡管不直接回答您的問題,但以下內容將有所幫助。 您需要讀取stdout和stderr(以捕獲所有進程的輸出),並同時進行以防止阻塞生成的進程。 有關更多信息,請參見此答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM