我们的 Catalina .out文件有时会变得非常非常大(是的,我将在我的应用程序中实现slf 4j和logback,以防止将来发生这种情况)。但是现在,当我开始循环日志时,我将 Catalina .out复制到catalina.{date}并执行cat /dev/null > catalina.out。问题是,在我这样做之后,tomcat将不再捕获日志,直到第二天早上重新启动tomcat,而这并不理想。为什么会发生这种情况?有没有办法避免?
cat /dev/null > catalina.out
5f0d552i1#
如果在tomcat停止后删除catalina.out,则一旦tomcat再次启动,它将创建一个新的catalina.out,这是完全安全的。但是如果您在tomcat运行时删除catalina.out,它将继续登录到已经删除的catalina.out(文件的引用由tomcat持有),因此空间不会被释放。因此您需要重新启动tomcat服务器来释放空间。不建议这样做。实际上,您可以使用下面的命令清除catalina.out文件的日志,而无需停止tomcat。
tomcat
catalina.out
sudo cat /dev/null > /opt/tomcat/apache-tomcat-9.0.37/logs/catalina.out
要使catalina.out更小,可以使用以下方法之一:1.您可以使用上面的Linux命令,并将其添加到CronScheduler,以便根据需要每天/每周/每月或每年运行一次。1.在Linux中使用logrotate工具。它是Linux中的一个日志管理命令行工具。它可以在不同的情况下轮转日志文件。特别是,**我们可以在固定的持续时间内轮转日志文件,或者在文件增长到一定大小时轮转日志文件。**您可以单击此处了解有关此操作的更多信息。
Linux
CronScheduler
logrotate
okxuctiv2#
简单直接的解决方案:Catalina ,通话完毕注意:如果需要,请添加sudo
okxuctiv3#
轻而易举:echo > catalina.out。文件描述符不会更改,并且java可以继续写入该文件。
echo > catalina.out
java
ct2axkht4#
传统的方法是
它将清除日志文件,并且不会中断当前持有打开的文件句柄的进程。更好的方法是不丢失您的日志信息,方法是旋转出日志文件。
/var/log/tomcat/catalina.out { copytruncate daily rotate 7 compress missingok size 5M }
然后使用以下命令重新启动logrotate(以root用户身份)
/usr/sbin/logrotate /etc/logrotate.conf
您应该每天轮换日志文件,或者如果大小超过5M,则保留最后七个日志以用于调试。
aurhwmvo5#
您可以截断文件。这在逻辑上也是有意义的,因为它本质上是您正在尝试做的事情。truncate -s 0 M catalina.out仅供参考:执行cat /dev/null > file不会更改文件的inode。
truncate -s 0 M catalina.out
cat /dev/null > file
logs]$ls -i test.log 19794063 test.log logs]$ logs]$cat /dev/null > test.log logs]$ls -i test.log 19794063 test.log
此外,在执行这些命令期间,我使用了一个单独的命令将实时数据跟踪到test.log。运行这些命令后,test.log的尾部仍然正常工作。这并不能回答您的问题,即为什么它停止工作,但它有助于排除inode中的更改。
test.log
bqf10yzr6#
您要寻找的是日志轮转。由于这需要在进程运行时使用低级别的signal support,因此您应该间接地执行此操作。您可以使用this procedure来实现此操作。Tomcat Wiki上也有此文档。
6za6bjd07#
进入文件夹/opt/tomcat/logs/在命令行中键入sudo echo〉 Catalina .out而不停止tomcat。。这将始终工作。您也可以在每天或每周的基础上计划此命令。。
pbpqsu0x8#
转到文件夹/opt/tomcat/logs/在命令行中键入--sudo echo〉 Catalina .通话完毕您可以在不关闭tomcat服务器的情况下运行此命令。.您还可以将此命令排定为每天或每周运行。.
8条答案
按热度按时间5f0d552i1#
如果在
tomcat
停止后删除catalina.out
,则一旦tomcat
再次启动,它将创建一个新的catalina.out
,这是完全安全的。但是如果您在
tomcat
运行时删除catalina.out
,它将继续登录到已经删除的catalina.out
(文件的引用由tomcat
持有),因此空间不会被释放。因此您需要重新启动tomcat
服务器来释放空间。不建议这样做。实际上,您可以使用下面的命令清除
catalina.out
文件的日志,而无需停止tomcat。要使
catalina.out
更小,可以使用以下方法之一:1.您可以使用上面的
Linux
命令,并将其添加到CronScheduler
,以便根据需要每天/每周/每月或每年运行一次。1.在
Linux
中使用logrotate
工具。它是Linux中的一个日志管理命令行工具。它可以在不同的情况下轮转日志文件。特别是,**我们可以在固定的持续时间内轮转日志文件,或者在文件增长到一定大小时轮转日志文件。**您可以单击此处了解有关此操作的更多信息。okxuctiv2#
简单直接的解决方案:
Catalina ,通话完毕
注意:如果需要,请添加sudo
okxuctiv3#
轻而易举:
echo > catalina.out
。文件描述符不会更改,并且java
可以继续写入该文件。ct2axkht4#
传统的方法是
它将清除日志文件,并且不会中断当前持有打开的文件句柄的进程。
更好的方法是不丢失您的日志信息,方法是旋转出日志文件。
然后使用以下命令重新启动logrotate(以root用户身份)
您应该每天轮换日志文件,或者如果大小超过5M,则保留最后七个日志以用于调试。
aurhwmvo5#
您可以截断文件。这在逻辑上也是有意义的,因为它本质上是您正在尝试做的事情。
truncate -s 0 M catalina.out
仅供参考:执行
cat /dev/null > file
不会更改文件的inode。此外,在执行这些命令期间,我使用了一个单独的命令将实时数据跟踪到
test.log
。运行这些命令后,test.log
的尾部仍然正常工作。这并不能回答您的问题,即为什么它停止工作,但它有助于排除inode中的更改。bqf10yzr6#
您要寻找的是日志轮转。由于这需要在进程运行时使用低级别的signal support,因此您应该间接地执行此操作。您可以使用this procedure来实现此操作。Tomcat Wiki上也有此文档。
6za6bjd07#
进入文件夹/opt/tomcat/logs/在命令行中键入sudo echo〉 Catalina .out
而不停止tomcat。。这将始终工作。您也可以在每天或每周的基础上计划此命令。。
pbpqsu0x8#
转到文件夹/opt/tomcat/logs/在命令行中键入--
sudo echo〉 Catalina .通话完毕
您可以在不关闭tomcat服务器的情况下运行此命令。.您还可以将此命令排定为每天或每周运行。.