我试图修复tomcat7服务器的文件权限已经两天了。我有一个库类(myapp / WEB-INF中包含的.jar文件)需要运行shell脚本。该库是由我编写的,在NetBeans中工作正常。在创建,阅读和删除文件时没有麻烦。这是因为NetBeans以blumonkey(我的Ubuntu系统上的用户名)运行程序。但是当我将它导入tomcat并运行它时,tomcat"执行"该命令不产生明确的输出,尝试检查文件(将在脚本成功时生成)并抛出FileNotFoundException。
更多详情如下:
sudo -u tomcat7 script.sh
时,它不起作用,即将其作为tomcat7运行。它只是退出而没有消息。我怀疑这是发生了什么,因为我试图通过重定向ProcessBuilder
中的错误和输出进行调试,但它们是空的。有关如何解决问题并使脚本运行的任何帮助将不胜感激。如果您需要更多信息,请发表评论。
脚本执行代码
private static void RunShellCommandFromJava(String command,String fn, String arg1,String arg2) throws Exception
{
try
{
System.out.println(System.getProperty("user.name"));
ProcessBuilder pbuilder = new ProcessBuilder("/bin/bash",command,fn,arg1,arg2);
System.out.println(pbuilder.command());
pbuilder.redirectErrorStream(true);
Process p = pbuilder.start();
p.waitFor();
}
catch(Exception ie)
{
throw ie;
}
}
需要执行的命令
"/bin/bash /abs/path/to/script.sh /abs/path/to/doc/in/data-folder maxpages=30 maxsearches=3"
PS :我已经关注了this问题,但它没有帮助。我还尝试了其他选项,例如Runtime.exec()
,bash
,/bin/bash/
和/bin/bash/ -c
,其中一些选项根本不起作用,其他选项则没有结果。
答案 0 :(得分:0)
尝试使用Runtime
并检查标准错误以找出问题所在(可能是权限或路径):
// run command
String[] fixCmd = new String[] { "/bin/bash", "/abs/path/to/script.sh", "/abs/path/to/doc/in/data-folder", "maxpages=30", "maxsearches=3" };
Process start = Runtime.getRuntime().exec(fixCmd);
// monitor standard error to find out what's wrong
BufferedReader r = new BufferedReader(new InputStreamReader(start.getErrorStream()));
String line = null;
while ((line = r.readLine()) != null) {
System.out.println(line);
}