我使用Tomcat7,我试图从tomcat启动sh脚本。我的sh脚本需要创建一个新文件并写入内容。如果我启动我的脚本,如./test.sh,它的工作完美,但如果我使用tomcat启动该脚本我会在执行期间拒绝权限错误脚本执行,它没有写入权限。 这是我的java代码:
String[] fixCmd = new String[] { path };
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);
}
和我的shellScript:
echo test >> test.txt
我尝试使用ProcessBuilder,但它也没有用。
我尝试使用我创建的所有解决方案更改文件夹的权限,但没有任何效果。当exec Tomcat曾经以root身份启动脚本时,他确实拥有所需的所有权限。我将文件夹的所有权限授予tomcat7用户以防万一,但没有任何改变。我有一些其他java脚本在服务器上创建和编写文件,所以我已经设法改变让tomcat写东西的权利和它的工作,所以我真的不知道是什么问题的脚本。
有什么想法吗?
编辑1:
ls -l ./test.sh
的输出完成了:
-rwxr-xr-x 1 tomcat7 tomcat7 165 nov. 2 16:12 ./test.sh
我以root身份登录,而且我也将red tomcat视为root。
编辑2解决的问题: 一位专家向我解释说我的问题是一个安全问题,因为tomcat是一个Web服务器,它是一个安全措施,不让它拥有sh脚本的写入权限。所以我改变了问题的方法,我将在java中读取sh脚本输出并从jave写入我的文件。
答案 0 :(得分:0)
访问容器文件系统上的文件很棘手,不鼓励(imo)。我想:您的问题与文件系统本身的权限无关,但与Web容器的权限(此处:tomcat)无关。
请参阅 Accessing linux local file system from java web application