Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AccessControlException:尝试写入日志文件时出现获取文件IO错误_Java_Linux - Fatal编程技术网

Java AccessControlException:尝试写入日志文件时出现获取文件IO错误

Java AccessControlException:尝试写入日志文件时出现获取文件IO错误,java,linux,Java,Linux,当应用程序试图初始化日志时,我不断收到一个Java IO异常。这是堆栈跟踪/var/lib/tomcat6/logs对任何人都有读写权限 java.security.AccessControlException: access denied (java.io.FilePermission /var/lib/tomcat6/logs/socksserver.log write) java.security.AccessControlContext.checkPermission(Acces

当应用程序试图初始化日志时,我不断收到一个Java IO异常。这是堆栈跟踪
/var/lib/tomcat6/logs
对任何人都有读写权限

java.security.AccessControlException: access denied (java.io.FilePermission /var/lib/tomcat6/logs/socksserver.log write) java.security.AccessControlContext.checkPermission(AccessControlContext.java:323) java.security.AccessController.checkPermission(AccessController.java:546) java.lang.SecurityManager.checkPermission(SecurityManager.java:532) java.lang.SecurityManager.checkWrite(SecurityManager.java:962) java.io.FileOutputStream.<init>(FileOutputStream.java:169) java.io.FileOutputStream.<init>(FileOutputStream.java:102) common.log.ThreadFileWriter.init(ThreadFileWriter.java:50) common.log.LogConfiguration.initLog(LogConfiguration.java:50) socksviahttp.server.ServletSocks.logInit(ServletSocks.java:113) socksviahttp.server.ServletSocks.init(ServletSocks.java:59) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) java.security.AccessController.doPrivileged(Native Method) javax.security.auth.Subject.doAsPrivileged(Subject.java:517) org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162) org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:115) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) java.lang.Thread.run(Thread.java:619) java.security.AccessControlException:拒绝访问(java.io.FilePermission/var/lib/tomcat6/logs/socksserver.log write) AccessControlContext.checkPermission(AccessControlContext.java:323) java.security.AccessController.checkPermission(AccessController.java:546) checkPermission(SecurityManager.java:532) checkWrite(SecurityManager.java:962) FileOutputStream.java.io.FileOutputStream。(FileOutputStream.java:169) FileOutputStream.(FileOutputStream.java:102) common.log.ThreadFileWriter.init(ThreadFileWriter.java:50) common.log.LogConfiguration.initLog(LogConfiguration.java:50) socksviahttp.server.ServletSocks.logInit(ServletSocks.java:113) socksviahttp.server.ServletSocks.init(ServletSocks.java:59) sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:39) reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) java.security.AccessController.doPrivileged(本机方法) javax.security.auth.Subject.doAsPrivileged(Subject.java:517) org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162) org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:115) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) run(Thread.java:619)
异常堆栈跟踪表明这不是一个文件权限错误,而是在安全管理器下运行Tomcat,您尚未设置允许它写入该路径的权限


policytool
是一个很好的程序,可以帮助您创建策略文件,您可以使用这些文件配置安全管理器。

不确定我是否遇到了与您完全相同的问题,或者我是否已经完全解决了自己的问题,但是,这里有一个帮助的机会。简言之,我认为这可能与Java安全管理器和$CATALINA_基本路径的配置有关

我每天都从Tomcat6 Solr 1.3安装中收到以下错误消息:

java.security.AccessControlException:拒绝访问(java.io.FilePermission/var/lib/tomcat6/logs read) 位于java.security.AccessControlContext.checkPermission(AccessControlContext.java:342) 位于java.security.AccessController.checkPermission(AccessController.java:553) 位于java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 位于java.lang.SecurityManager.checkRead(SecurityManager.java:888) 位于java.io.File.exists(File.java:748) 位于java.io.File.mkdirs(File.java:1195)

日志目录的文件权限设置正确,日志是在第一次抛出消息后创建的。但是,在第二天创建新的旋转日志文件时,错误会再次出现

经过一番挖掘,我了解到错误是由Java安全管理器抛出的,与操作系统文件权限无关。事实证明,JSM日志记录设置是从$CATALINA_基本路径中删除的,在我的安装中没有正确配置$CATALINA_BASE应该指向为tomcat动态创建的文件的位置,但是,如果未配置,则默认为$CATALINA_HOME dir,这是tomcat二进制文件所在的位置。因此,我不确定JSM是否具有操作日志目录中文件的正确权限

我已经将CATALINA_BASE=“/var/lib/tomcat6”添加到我的CATALINA.sh文件中,并且相信我已经解决了这个问题

希望这是正确/有用的信息