我正在将Tomcat web应用程序从旧版本的Ubuntu和Tomcat 7迁移到Ubuntu 20.04和Tomcat 9。该应用程序将各种文件写入/tmp目录,但在切换到Ubuntu 20.04和Tomcat9之后,写入/tmp文件夹的操作会自动失败。我在Tomcat日志中没有看到任何内容表明为什么没有写入文件,我的应用程序也没有抛出异常(如果应用程序无法写入目录,我希望会出现IO异常或其他情况(。
我做了一些实验,可以将文件写入/var/lib/tomcat/logs。我是否需要在Tomcat或Ubuntu中更改配置参数以允许Tomcat写入/tmp?
在最近的Debianoids(自Debian-Buster以来(上,tomcat9.service
在其自己的mnt命名空间中运行(参见Linux命名空间(。唯一的安装点不同于";真实的">文件系统是/tmp
,它位于:下
/tmp/systemd-private-*-tomcat9.service-*/tmp
并且它对于普通用户是不可访问的(它的父级是chmod700
并且由root
所有(。
如果您希望Tomcat与系统的其他部分共享/tmp
目录,您可以通过以下方式覆盖tomcat9.service
文件:
systemctl edit tomcat9.service
并添加:
[Service]
PrivateTmp=no
(参见SystemD文档(。
编辑:正如您在注释中所说,tomcat9.service
设置了ProtectSystem=strict
,因此服务将所有文件系统视为只读。因此,您要么需要:
ProtectSystem=off
或
ReadWritePaths=/tmp
我能够通过在/usr/lib/systemd/system/apache2.service
下编辑文件来解决这个问题
和从进行编辑
PrivateTmp=True
至
PrivateTmp=no