无法清理运行中Tomcat的catalina.out日志,执行命令后日志立即恢复原大小
运行中Tomcat无法清理catalina.out的解决办法
直接用> catalina.out或echo > catalina.out清空后文件立即恢复原大小,是因为Tomcat进程仍持有该文件的句柄,写入操作会从之前的偏移量继续,导致文件出现空洞(显示大小和原文件一致,但实际占用空间可能更小)。以下是几种可行的解决方法:
方法一:清空后让Tomcat重新加载日志
- 先清空日志文件:
cat /dev/null > catalina.out - 找到Tomcat的进程ID(替换
<tomcat_pid>为实际PID):ps aux | grep tomcat - 发送USR1信号让Tomcat重新打开日志文件:
发送信号后,Tomcat会重新绑定catalina.out,后续写入将从文件开头开始,不会再恢复原大小。kill -USR1 <tomcat_pid>
方法二:用logrotate自动管理日志(推荐长期使用)
配置logrotate规则,实现日志自动切割、压缩,无需手动清理:
- 创建logrotate配置文件(比如
/etc/logrotate.d/tomcat):/opt/tomcat/logs/catalina.out { daily missingok rotate 7 compress delaycompress copytruncate notifempty create 640 tomcat tomcat }copytruncate:复制原日志到备份文件后截断原文件,无需重启Tomcatrotate 7:保留7天的日志备份compress:压缩旧日志
- 手动测试规则生效:
logrotate -f /etc/logrotate.d/tomcat
方法三:临时应急(需重启Tomcat)
如果无法发送信号或使用logrotate,可先删除原文件,创建空文件后重启Tomcat:
rm -f catalina.out touch catalina.out chown tomcat:tomcat catalina.out # 确保权限和原文件一致 systemctl restart tomcat # 或用对应的Tomcat重启命令
内容的提问来源于stack exchange,提问作者Marco Qau
相关产品推荐
相关产品推荐

