我在 linux 机器上有一个用 java 编写的休息服务。
我正在使用:
p = Runtime.getRuntime().exec(cmmnd);
或
ProcessBuilder pb = new ProcessBuilder(cmmnd).inheritIO();
p = pb.start();
p.waitFor();
我可以执行像mkdir
, touch
这样的命令...
但是当我尝试运行 sh 文件时没有任何反应(例如:sudo sh/home/mydir/myfile.sh
)
这是权限问题吗?我该如何解决?
最佳答案
这里只有文件执行权限是不够的。首先从命令提示符手动运行命令 sudo sh/home/mydir/myfile.sh
并检查是否有效?你 sodo
要求输入密码吗?您正在执行命令的 Web 服务帐户是否有权以 sudo
身份执行?还要检查您的网络应用程序是否具有对位置的文件访问权限(意味着它可以执行 cd/home/mydir/
) /home/mydir/myfile.sh
或不?
还在您的代码中读取输出并检查实际错误是什么?
p.getOutputStream();
也试试:-
ProcessBuilder pb = new ProcessBuilder("sudo sh /home/mydir/myfile.sh");
pb.redirectOutput(new File("/new_path/out.txt"));
Process p = pb.start();
try {
p.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
关于java - 如何在 linux 上从 rest 服务执行 sh 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49111062/