在 CentOS 上设置 Java 日志权限,常见场景是 Tomcat / Spring Boot / 普通 Java 程序 写日志时权限不足或日志文件无法访问。下面分几种常见情况说明,按推荐程度给出做法。
假设你运行 Java 的用户是 appuser,日志目录是 /data/logs/java。
# 创建日志目录
mkdir -p /data/logs/java
# 修改属主
chown -R appuser:appuser /data/logs/java
# 设置合理权限
chmod -R 750 /data/logs/java
启动 Java 程序时:
sudo -u appuser java -jar app.jar
✅ 优点
[Unit]
Description=Java App
After=network.target
[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -jar app.jar
StandardOutput=append:/data/logs/java/app.log
StandardError=append:/data/logs/java/app.log
Restart=always
[Install]
WantedBy=multi-user.target
chown -R appuser:appuser /data/logs/java
chmod 750 /data/logs/java
✅ systemd 会自动以 appuser 写日志
tail -f logs/catalina.out
Permission denied
# 假设 tomcat 用户
chown -R tomcat:tomcat /opt/tomcat/logs
chmod 750 /opt/tomcat/logs
如果手动启动:
su - tomcat
./startup.sh
❌ 不要:
chmod 777 logs
logging:
file:
name: /data/logs/java/app.log
pattern:
console: "%d %p %c - %m%n"
mkdir -p /data/logs/java
chown -R appuser:appuser /data/logs/java
chmod 777 /data/logs/java
chmod 755 /data/logs/java
CentOS 默认开启 SELinux,日志写失败但 ls -l 看起来正常。
getenforce
setenforce 0
semanage fcontext -a -t var_log_t "/data/logs/java(/.*)?"
restorecon -Rv /data/logs/java
# 1. 看 Java 运行用户
ps -ef | grep java
# 2. 看日志目录权限
ls -ld /data/logs/java
# 3. 看报错
tail -f /data/logs/java/app.log
journalctl -u your-java-service -f
| 项目 | 推荐值 |
|---|---|
| Java 运行用户 | 非 root(appuser) |
| 日志目录 | /data/logs/java |
| 目录权限 | 750 |
| 属主 | appuser:appuser |
| SELinux | 正确配置而非关闭 |
如果你愿意,可以告诉我:
我可以给你 精确的权限配置命令。