作为 Windows 服务运行的码头在关机后不会清理临时文件



我正在运行Jetty 9.4.11.v20180605作为带有procrun的Windows服务。当我启动此服务时,Jetty将战争提取到临时文件夹中。但是当我关闭服务时,Jetty 不会自行删除这些文件。

为了防止启动行为,我更改了开始.ini并将 jetty.deploy.extractWars 设置为 false。它做了它应该做的事情,但是当我调用网络应用程序时,我收到HTTP错误503(服务不可用)。

我尝试的第二个是在xml文件中配置WebAppContext,如下所示:

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="persistTempDirectory">false</Set>
</Configure>

如此处所述,我将其写入名为jetty-web.xml的文件中,将其放入我的Web应用程序的WEB-INF文件夹中,它可以工作,但是当我在浏览器中调用Web应用程序时,它只会向我显示我的Web应用程序的文件夹结构。当我将下面的行放入 jetty-web-cdi2.xml 进行服务器配置时,也会发生同样的情况。

我做错了什么?

从文档中:

/

opt/jetty/temp 目录被创建为 Jetty 用于临时目录和工作目录的持久位置。许多 Unix 系统会定期清理/tmp 目录,这种行为在 Servlet 容器中是不希望的,并且已知会导致问题。位于/opt/jetty/temp 的这个持久目录可解决该行为。

似乎有很多包含临时文件的码头单元测试,还有一些专门用于检查临时文件是否被删除。

https://github.com/eclipse/jetty.project/blob/9706d70484863a014d3604e5e7cb4af40aa4cb1e/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/MultiPartServletTest.java#L135

文件可以具有退出时要删除的属性

https://github.com/eclipse/jetty.project/blob/9706d70484863a014d3604e5e7cb4af40aa4cb1e/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java#L792

因此,总而言之,似乎 Jetty 需要长寿命的临时文件,并且最好在不再需要它们后清理它们。

也许码头想这样做,但实际上在我的情况下并非如此。我的一个客户每晚都会重新启动运行 Web 应用程序的服务器,因此码头临时文件夹变得非常大,没有任何许可。所以我必须为此找到解决方法,我有:

我使用Windows临时文件夹让码头解开战争的包装。您可以通过在命令行中键入 %TMP% 来获取此基于用户的目录。 Windows 中的标准设置不会自动清除此文件夹。但是您可以使用Windows中的磁盘清理工具手动清除它。在Windows 10中,您还可以启用临时文件夹的自动清理:"Windows设置"->"系统"->"存储"->打开"存储感知"。 如果通过磁盘清理工具清除临时文件夹,则不会触及 jetty 的当前使用的文件夹和属性文件,因此 Web 应用在清理后仍在工作。

最新更新