无法使用进程生成器执行脚本 (.sh),并且在我的 vps 中打印错误



我正在尝试在Java中执行一个。sh脚本(关闭)在linux vps.

ProcessBuilder pb = new ProcessBuilder("/bin/bash", "mkdir", "test"); //here I want to change "mkdir" and "test" by shutdown.sh
pb.directory(new File("/opt/tomcat/transfert/"));
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
ArrayList<String> lines = new ArrayList<String>();
while ((line = reader.readLine()) != null) {
lines.add(line);
lines.add(System.getProperty("line.separator"));
}
request.setAttribute("lines", lines);

我在windows 10上工作,我通过vps上的tomcat服务器,所以我在vps上执行期间看不到任何控制台(这是为了我在请求中传递行以在我的webcontent中显示此内容)。如果你知道如何在vps输出上打印错误,那将是很酷的.

但在执行时,什么也没做,我的"转让"没有变化。文件夹和什么都没有返回到我的网页。

在我的debian vps中,我更新了不同的文件和文件夹权限,使其可执行和可读。

我在另一个主题中看到问题可能是"用户"。使用的ProcessBuilder没有正确的权限,但如何改变它?

所以我不明白为什么会发生这种情况,因为我改变了代码中的所有内容,并搜索了许多正确运行的方法,但却不想工作…

后写的:如果我尝试直接在我的vps控制台命令,工作!

:

我也试着这样做:

String[] cmd = {
"/bin/sh",
"-c",
"mkdir /home/debian/test"
};
Process proc = Runtime.getRuntime().exec(cmd);

但这并没有更多的作用…

Thx,艾蒂安

如果直接调用,运行命令/bin/bash mkdir test可能无法在您的系统上工作。你需要&;-c&;让bash启动另一个命令:

ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "mkdir test");

安全使用绝对路径和扫描错误消息,这是简单的通过合并错误→/bin/bash"如果shutdown.sh以"#!/bin/sh":

ProcessBuilder pb = new ProcessBuilder("/opt/tomcat/transfert/shutdown.sh");
// merge STDERR to STDOUT - or call redirectError(File)
pb.redirectErrorStream(true);