>当我从控制台运行命令时,一切正常:
sudo -u oracle fgrep ...
当我使用 ProcessBuilder
从 Java 代码运行相同的命令时,sudo 不起作用,我需要将 chmod 设置为 775,否则我没有读取日志的权限。
为什么这不起作用?是否有在没有 chmod 775 的情况下读取日志的选项?
以下是我如何使用ProcessBuilder
:
ProcessBuilder pb = new ProcessBuilder("bash", "-c", command);
Process shell = pb.start();
InputStream is = shell.getInputStream();
由于您说日志文件chmod 775
它有效,因此很明显您的进程没有权限。
你可以使用 sudo 运行你的 java:
sudo java ClassFileName
或者只是将sudo
添加为传递给 bash 进程的数组中的第一个字符串:
command[0]="sudo -u oracle ";
//command[1]=commandname;
//command[2...n]=Other params;
假设用户oracle
在 sudoers 列表中并且不会询问密码,这将像使用 sudo
时在命令行中的运行方式一样运行。
a.你不需要 bash -c,当你执行命令时,你有一个 shell。
二.该命令需要在空格上拆分,然后作为数组传递到 ProcessBuilder 中。