问题前提:
服务器上有多个tomcat,对应不同的端口,然后有多个项目处在同一个文件夹下面,有一个项目从对外的测试tomcat中转移到80端口的tomcat里,项目位置是不变的。然后启动之后就一直处于等待或者干脆404,,查看了logs的日志发现了错误信息。
错误信息如下:
java.lang.IllegalArgumentException: Document base XXXX does not exist or is not a readable directory
at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4249)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4418)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
排查过程:
参考网络上的做法:
1.该项目的War文件从***/apache-tomcat-6.0.16/webapps ;
2.该项目的某些配置从 ***apache-tomcat-6.0.16/work/Catalina/localhost ;
3.该项目的配置文件,目录: ***/apache-tomcat-6.0.16/conf/Catalina/localhost。
但是无效,后来的话突然想服务器权限的问题。发现,确实是这样子,对外的80端口的tomcat本身启动的时候是配有一个低权限的用户的。然后在出错的项目中,是没有对这个用户进行分配权限的。
解决办法:
对这个tomcat的权限用户赋予项目的访问权限,启动。然后就解决了。