我在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
身份执行?还要检查您的Web应用程序是否具有位置的文件访问权限(意味着它是否可以执行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();
}