当我从控制台运行命令时,一切正常:
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();
答案 0 :(得分:0)
一个。当您执行命令时,您不需要bash -c。
湾该命令需要在空格上拆分,然后作为数组传递给ProcessBuilder。
答案 1 :(得分:0)
由于你说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
时,这将与在命令行中运行的方式一样运行。