【问题标题】:Unable To Create the file [META-INF/war-tracker] Tomcat 9 linux无法创建文件 [META-INF/war-tracker] Tomcat 9 linux
【发布时间】:2019-04-18 19:22:04
【问题描述】:

Tomcat 日志:

java.io.IOException: Unable to create the file [/usr/local/tomcat/webapps/mywebapp/META-INF/war-tracker]
    at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:180)
    at org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:609)
    at org.apache.catalina.startup.ContextConfig.beforeStart(ContextConfig.java:742)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:424)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:182)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:772)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1585)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:308)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:424)
    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:367)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:972)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1432)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1422)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:944)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:261)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:801)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:695)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)

突然服务器不工作了, 未提取 webapps 中的 WAR 文件,无法处理 API 请求,

上下文文件:

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

我尝试从 TOMCAT 页面上的管理器进行部署,但再次失败。

在日志中查找: 无法创建文件 [/usr/local/tomcat/webapps/mywebapp/META-INF/war-tracker] 我寻找解决方案,但没有找到,有人发生在他身上吗?

Tomcat:apache-tomcat-9.0.13 openjdk 版本“1.8.0_171”

【问题讨论】:

  • 我觉得还有更多例外。也许是权限被拒绝错误?您能否进一步查看日志以查看是否有更多信息?
  • 嗨@stdunbar没有更多的错误细节。
  • 我删除了tomcat并安装了另一个,甚至更少的版本,同样的错误。
  • @stdunbar 我更改了war文件权限,例如:chmod -R 777 mywebapp.war,tomcat没有提取war文件。在日志中就是错误。
  • 如果没有其他信息,那只是猜测。您的 web 应用程序的权限并不重要——我相信,它是 META-INF 目录的权限。你的磁盘空间不足吗?再说一次,恐怕我是根据现有信息猜测的。

标签: java linux tomcat tomcat8 tomcat9


【解决方案1】:

问题是部署战争中的文件“META-INF/war-tracker”:

来自 Tomcat 文档:

注意:如果 Tomcat 扩展了 WAR 文件,那么它将在解压后的目录结构中添加一个文件(/META-INF/war-tracking),用于在 Tomcat 未运行时检测 WAR 文件中的更改.任何此类更改都会在 Tomcat 下次启动时触发扩展目录的删除和更新的 WAR 文件的部署。

您似乎手动打包了战争文件并包含了 META-INF/war-tracker。在部署期间,Tomcat(从版本 8 起 AFAIK)尝试创建所述文件以检测更改。但是,如果存在这样的文件,Tomcat 将无法创建该文件,并会抛出您上面提到的异常。

解决方案:

在部署之前从您的战争文件中删除文件“META-INF/war-tracker”,一切就绪。

【讨论】:

    【解决方案2】:

    我们在 Windows 下的行为完全相同。在我们的例子中,解释很简单,但很难找到:在我们部署的 *.war 中已经有一个文件META-INF/war-tracker。据推测,战争是根据已经解压的目录树手工伪造的,而不是由 IDE 创建的。

    【讨论】:

      猜你喜欢
      • 2014-01-09
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      相关资源
      最近更新 更多