【发布时间】:2015-08-17 21:11:20
【问题描述】:
两天来,我一直在努力解决我的 tomcat7 服务器的文件权限问题。我有一个需要运行 shell 脚本的库类(myapp/WEB-INF 中包含的 .jar 文件)。该库由我编写,在 NetBeans 中运行良好,即。轻松创建、读取和删除文件。那是因为 NetBeans 将程序作为 blumonkey(我在我的 Ubuntu 系统上的用户名)运行。但是当我将它导入 tomcat 并运行它时,tomcat“执行”命令,不产生明确的输出,尝试检查文件(将在脚本成功时生成)并抛出 FileNotFoundException。
更多详情如下:
- Tomcat7 使用 apt-get 安装,其数据位于 2 个位置 - /var/lib/tomcat7 包含 conf 和 webapps 文件夹,/usr/share/tomcat7 包含 bin 和 lib 文件夹
- 用户上传一个 .zip 文件,该文件存储到 /home/blumonkey/data。程序的其余部分在此处存储的文档上运行。显然,tomcat 上传的所有新文件夹/文件的所有者都是 tomcat7。
- 我尝试过将所有权更改为 blumonkey,将 tomcat7 添加到 blumonkey 用户组,但这些方法都不起作用(这里的某个地方我可能不小心搞砸了更改权限:/)。显然,tomcat7 无法处理它拥有的文件。(这怎么可能?)。
- 当我在终端中运行该脚本时,它可以工作。但是当我做
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,其中一些根本不起作用,另一些则没有结果。
【问题讨论】:
-
tomcat 7是否有权限运行该文件?以及文件中的所有命令?如果它有一个需要 root 权限的命令,我可以看到问题
-
脚本中没有这样的命令 - 基本的 wget 、 awk 等。tomcat 有权运行文件是什么意思?
-
用户tomcat有执行权限吗?
-
嗯,是的,tomcat 有一些怪癖,抱歉,我无法提供进一步的帮助
标签: java linux shell tomcat permissions