温馨提示×

Debian Tomcat日志权限问题

小樊
41
2026-07-13 09:16:16
栏目: 智能运维

在 Debian 上 Tomcat 日志权限问题通常表现为:

  • Tomcat 启动失败或无法写入日志
  • catalina.outlogs/ 目录无写权限
  • 权限被 systemd / 日志轮转(logrotate)破坏
  • 手动改完权限,重启后又失效

下面按 常见原因 → 正确做法 → 排查步骤 来说明。


一、最常见原因

1️⃣ Tomcat 以 tomcat 用户运行,但日志目录属于 root

Debian 默认 Tomcat 用户是:

tomcat
# 或
tomcat9

如果日志目录属于 root:

ls -ld /var/log/tomcat*

看到类似:

drwxr-x--- root root

Tomcat 就无法写日志。


2️⃣ systemd 重启后权限被重置

Debian 使用 systemd 管理服务:

systemctl status tomcat9

systemd 并不会自动修复日志目录权限。


3️⃣ catalina.out 权限被 logrotate 改坏

/etc/logrotate.d/tomcat9 中如果缺少 createsu 配置,会导致:

  • 日志被截断
  • 新日志文件属主变成 root

二、正确的权限设置(推荐做法)

✅ 1. 确认 Tomcat 运行用户

ps aux | grep tomcat

或:

grep User /lib/systemd/system/tomcat9.service

常见结果:

User=tomcat
Group=tomcat

✅ 2. 修复日志目录权限(关键)

sudo chown -R tomcat:tomcat /var/log/tomcat9
sudo chmod 750 /var/log/tomcat9

如果还有 catalina.out

sudo chown tomcat:tomcat /var/log/tomcat9/catalina.out

✅ 3. 同时修复 webapps / work / temp(避免连带问题)

sudo chown -R tomcat:tomcat /var/lib/tomcat9/{webapps,work,temp}

三、systemd 场景下的正确做法(非常重要)

✅ 不要直接 chmod 777

这是错误做法


✅ 在 systemd service 中设置目录权限(推荐)

编辑:

sudo systemctl edit tomcat9

添加:

[Service]
LogsDirectory=tomcat9
LogsDirectoryMode=0750

保存后:

sudo systemctl daemon-reload
sudo systemctl restart tomcat9

四、logrotate 导致权限问题的修复

查看 logrotate 配置

cat /etc/logrotate.d/tomcat9

✅ 正确示例(Debian 推荐)

/var/log/tomcat9/*.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
    create 0640 tomcat tomcat
    su tomcat tomcat
}

⚠️ 如果没有:

create ... tomcat tomcat
su tomcat tomcat

必须加上,否则轮转后 Tomcat 无法写日志。


五、快速排查清单(一步步来)

# 1. Tomcat 是否启动失败
systemctl status tomcat9

# 2. 日志目录权限
ls -ld /var/log/tomcat9

# 3. 当前日志文件权限
ls -l /var/log/tomcat9

# 4. 运行用户
ps aux | grep java

# 5. journal 日志
journalctl -u tomcat9 -n 50

六、典型错误示例

❌ 错误:

chmod 777 /var/log/tomcat9

✅ 正确:

chown -R tomcat:tomcat /var/log/tomcat9

七、如果你愿意,我可以帮你:

  • ✅ 精确分析你的 Debian 版本(10 / 11 / 12)
  • ✅ 看你的 tomcat9.service
  • ✅ 看你的 logrotate 配置
  • ✅ 判断是 systemd / 权限 / SELinux / AppArmor 问题

你可以直接贴出:

ls -l /var/log/tomcat*
systemctl status tomcat9

0