Ste*_*ler 3 permissions log-files logging file-permissions tomcat9
我有一个 Java webapp,它在 Ubuntu Linux 上的 Apache Tomcat 下运行。当我从 Tomcat 8 升级到 Tomcat 9 时,应用程序无法再将日志文件写入/var/log/myapp. 我不明白为什么它没有权限登录到这个位置。
我的第一个想法是用户改变了。Tomcat 8 在tomcat8:tomcat8用户下运行。Tomcat 9 在tomcat:tomcat用户下运行。我用这些权限更新了目录。无论是tomcat用户和tomcat组具有写权限。
我还检查了该目录的写入和执行权限。该目录具有写入和执行权限,所有父目录都具有执行权限。
/var/log/myapp/ drwxrwxr-x tomcat tomcat
/var/log drwxrwxr-x root syslog
/var drwxr-xr-x root root
/ drwxr-xr-x root root
Run Code Online (Sandbox Code Playgroud)
如果我在我的 Web 应用程序下运行以下代码
File logdir = new File("/var/log/myapp");
setAttribute("debug",
"<br>user: " + System.getProperty("user.name") +
"<br>execute: " + logdir.canExecute() +
"<br>read: " + logdir.canRead() +
"<br>write: " + logdir.canWrite()
);
Run Code Online (Sandbox Code Playgroud)
它打印出没有写权限
user: tomcat
execute: true
read: true
write: false
Run Code Online (Sandbox Code Playgroud)
如果我作为tomcat用户在主方法中运行类似的代码
File logdir = new File("/var/log/myapp");
System.out.println("\n user: " + System.getProperty("user.name") +
"\n execute: " + logdir.canExecute() +
"\n read: " + logdir.canRead() +
"\n write: " + logdir.canWrite()
);
Run Code Online (Sandbox Code Playgroud)
它打印出它有写权限
user: tomcat
execute: true
read: true
write: true
Run Code Online (Sandbox Code Playgroud)
我已经用尽了我知道如何做的所有调试。是什么阻止了我的 Web 应用程序在 tomcat 9 下写入此目录?我需要做什么来修复它。
这是由作为 Debian/Ubuntu 一部分的 tomcat 9 周围的新 systemd 沙箱引起的。要解决此问题,您需要告诉 systemd 允许对 Tomcat 的其他目录进行读写访问。
sudo mkdir -p /etc/systemd/system/tomcat9.service.d
echo -e "[Service]\nReadWritePaths=/var/log/" | sudo tee /etc/systemd/system/tomcat9.service.d/logging-allow.conf
sudo systemctl daemon-reload
sudo systemctl restart tomcat9
Run Code Online (Sandbox Code Playgroud)
进行这些更改后,Web 应用程序可以再次写入自己的/var/log.
| 归档时间: |
|
| 查看次数: |
4403 次 |
| 最近记录: |