繁体   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